category類別中新增屬性

2022-09-16 07:24:09 字數 1040 閱讀 9463

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