反射機制
ios反射機制:執行時選擇建立哪個例項,並動態選擇呼叫哪個方法。
獲取class的三種方法
// 通過字串獲取class
class class = nsclassfromstring(@"nsstring");
nslog(@"class type : %@", class);
// 直接用class 來建立物件 ,通過物件來獲取class
id str = [[class alloc] init];
nslog(@"%@", [str class]);
// 通過類來獲取class
nslog(@"%d", class==nsstring.class);
常用判斷方法
// 當前物件是否這個類或其子類的例項
- (bool)iskindofclass:(class)aclass;
// 當前物件是否是這個類的例項
- (bool)ismemberofclass:(class)aclass;
// 當前物件是否遵守這個協議
- (bool)conformstoprotocol:(protocol *)aprotocol;
// 當前物件是否實現這個方法
- (bool)respondstoselector:(sel)aselector;
松耦合,類與類之間不需要太多依賴
構建靈活
不利於維護。使用反射模糊了程式內部實際發生的事情,隱藏了程式的邏輯。這種繞過原始碼的方式比直接**更為複雜,增加了維護成本。
效能較差。使用反射匹配字串間接命中記憶體比直接命中記憶體的方式要慢。當然,這個程度取決於使用場景,如果只是作為程式中很少涉及的部分,這個效能上的影響可以忽略不計。但是,如果在效能很關鍵的應用核心邏輯中使用反射,效能問題就尤其重要了
應用場景:
1、路由模式情況下的頁面跳轉。
2、fmdb二次資料庫封裝。
php反射機制應用
用來獲取指定的類的資訊,包括類中的屬性,方法,方法許可權,注釋等 用途 1.thinkphp框架中的前置,後置控制器的實現 2.與debug backtrace函式結合使用,檔案呼叫的許可權管理 使用方法 1 2class person 2728 public function setid v 31...
反射機制的深入應用
1 通過反射呼叫類中的方法 呼叫無引數方法 1 public class instancedemo catch exception e 9try catch exception e 1516 17 呼叫有引數方法 1 public class instancedemo catch exception...
iOS開發之 巧用反射機制
1 應用場景 自定義uitabbarcontroller的tabbar檢視 1 隱藏tabbar檢視 一般我們選擇自定義tabbar檢視有兩種方式。1是將tabbar檢視隱藏 2是將tabbar檢視從父檢視中移除,如下 假設,已建立uitabbarcontroller子類 void viewdidl...