讓Category支援新增屬性與成員變數

2021-06-18 03:41:57 字數 1326 閱讀 5356

category是objective-c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。     

一種常見的辦法是通過runtime.h中objc_getassociatedobject / objc_setassociatedobject來訪問和生成關聯物件。通過這種方法來模擬生成屬性。

//

nsobject+indiebandname.h

@inte***ce

nsobject (indiebandname)

@property (nonatomic, strong) nsstring *indiebandname;

@end

上面是標頭檔案宣告,下面的實現的.m檔案:

//

nsobject+indiebandname.m

#import

"nsobject+extension.h

"#import

static

const

void *indiebandnamekey = &indiebandnamekey;

@implementation

nsobject (indiebandname)

@dynamic indiebandname;

- (nsstring *)indiebandname

- (void)setindiebandname:(nsstring *)indiebandname

@end

這個和category無關,但是也是runtime.h的一種應用。dlintrospection,是 乙個nsobject category。它為nsobject提供了一系列擴充套件函式:  

@inte***ce

nsobject (dlintrospection)

+ (nsarray *)classes;

+ (nsarray *)properties;

+ (nsarray *)instancevariables;

+ (nsarray *)classmethods;

+ (nsarray *)instancemethods;

+ (nsarray *)protocols;

+ (nsdictionary *)descriptionforprotocol:(protocol *)proto;

+ (nsstring *)parentclasshierarchy;

@end

通過這些函式,你可以在除錯時(通過po命令)或者執行時獲得物件的各種資訊。

Category支援新增屬性與成員變數

category是objective c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。一種常見的辦法是通過runtime.h中objc getassociatedobject objc setassociatedobject來...

iOS為Category新增屬性

一般認為category不能新增變數,其實可以使用 dynamic 來動態新增的。即執行時runtime 分類裡面不能新增ivar是因為分類本身並不是乙個真正的類,它並沒有自己的isa。原文出自 1.建立uiviewcontroller的類別並新增幾個屬性 import inte ce uiview...

category類別中新增屬性

1.不能新增的原因 首先,使用 property的時候,系統會自動生成帶 的成員變數和該變數的setter和getter方法。也就是說,屬性相當於乙個成員變數加getter和setter方法。但是,在類別新增屬性,此時person類裡並沒有新增帶 的成員變數,也沒有實現setter和getter方法...