//1.不能新增的原因
首先, 使用@property的時候,系統會自動生成帶「_」的成員變數和該變數的setter和getter方法。也就是說,屬性相當於乙個成員變數加getter和setter方法。
但是,在類別新增屬性, 此時person類裡並沒有新增帶「_」的成員變數,也沒有實現setter和getter方法,只是在屬性列表裡新增了height屬性。並且此時如果在控制器裡呼叫self.height,程式執行時會報錯,顯示找不到該方法
//綜上\\成員變數是乙個類的東西,分類本身就不是乙個類,分類本來就是oc裡面通過執行時動態的為乙個類新增的一些方法和屬性等,不是乙個真正的類,它並沒有自己的isa,類最開始生成了很多基本屬性,比如ivarlist,methodlist,分類只會將自己的method attach到主類,並不會影響到主類的ivarlist。這就是為什麼分類裡面不能增加成員變數的原因。
//2.新增的方法
#import
@inte***ceheartview (testproperty)
@property(nonatomic,copy)nsstring*str ;
@property (nonatomic, copy) nsstring *height;
@end
staticvoid*strkey = &strkey;
@implementationheartview (testproperty)
-(void)setstr:(nsstring*)str
-(nsstring*)str
@end
//用來標記是哪乙個屬性的key常見有三種寫法,但**效果是一樣的,如下:
//////利用靜態變數位址唯一不變的特性
//1、static void *strkey = &strkey;
////2、static nsstring *strkey = @"strkey";
////3、static char strkey;
//關聯策略是個列舉值,解釋如下:
////enum ;
iOS為Category新增屬性
一般認為category不能新增變數,其實可以使用 dynamic 來動態新增的。即執行時runtime 分類裡面不能新增ivar是因為分類本身並不是乙個真正的類,它並沒有自己的isa。原文出自 1.建立uiviewcontroller的類別並新增幾個屬性 import inte ce uiview...
利用類別 Category 為物件新增」例項變數」
posted by pimacun on 六 17,2011 in 開發 subscribe 主要利用objectivec的c api中函式 void objc setassociatedobject id object,const void key,id value,objc associatio...
利用類別 Category 為物件新增」例項變數」
利用類別category為物件新增例項變數 屬性擴充套件用objc setassociatedobject,objc getassociatedobject,方法擴充套件用category 主要利用objectivec的c api中函式 void objc setassociatedobject i...