//當我用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的形式,這樣就可以用了。
這樣,就實現了獲取類的動態屬性
如有問題可以發郵件到
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還是...