IOS類的動態屬性研究

2021-06-27 15:42:12 字數 1224 閱讀 9943

//當我用valueforkey的時候,如果沒有這個key 會自動呼叫這個方法,然後就可以在這個方法裡進行一些操作了

- (id)valueforundefinedkey:(nsstring *)key

return [super valueforundefinedkey:key];

}//當我掉乙個沒有宣告和實現的方法的時候 比方說[info _isinstall_baidu](info裡並沒有宣告和實現_isinstall_baidu這個方法)會自動調到這裡,然後就可以在這兩個方法裡做一些操作了

- (nsmethodsignature *)methodsignatureforselector:(sel)selector

- (void)forwardinvocation:(nsinvocation *)invocation

else

} 這樣 當我使用

的時候,就可以從- (void)forwardinvocation:(nsinvocation *)invocation這個方法裡得到返回值,得到是否安裝的資訊了。

當我使用bool isinstall = [info valueforkey:@"_isinstall_baidu」]

的時候,就可以從- (id)valueforundefinedkey:(nsstring *)key這個方法裡得到返回值,得到是否安裝的資訊了。

目前直接使用bool isinstall = info._isinstall_baidu是不合法的。xcode會報錯。

但是有一種情況 用謂詞nspredicate的時候 比方說

這麼用的時候,把info._isinstall_baidu當成字串的時候 nspredicate 會進行轉換,換成valueforkey的形式,這樣就可以用了。

這樣,就實現了獲取類的動態屬性

如有問題可以發郵件到

[email protected]進行討論

iOS類的屬性研究

定義乙個類並定義一些屬性用來測試。inte ce sktestclassproperty nsobject brief 測試字串屬性 t nsstring c,v name property nonatomic,copy nsstring name brief 測試整形屬性 nsinteger tq...

iOS動態新增屬性

之前一篇文章 ios關聯物件 詳細介紹了如何通過關聯物件新增屬性,本篇文章將介紹如何通過runtime的class addproperty或class addivar動態新增屬性,並且帶領大家看看這兩個方法底層是如何實現的。對於已經存在的類我們用class addproperty方法來新增屬性,而對...

iOS 屬性的屬性

賦值 class.propertya instancea retain,assign,copy 只影響 instancea的計數,可能增加,可能不變。到這句執行完畢為止,只要instancea是合法的,propertya就是合法的。retain,assign,copy 誰建立了instancea還是...