iOS 反射機制和應用

2021-10-05 22:56:06 字數 1043 閱讀 5724

反射機制

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...