category是objective-c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。
一種常見的辦法是通過runtime.h中objc_getassociatedobject / objc_setassociatedobject來訪問和生成關聯物件。通過這種方法來模擬生成屬性。
//上面是標頭檔案宣告,下面的實現的.m檔案:nsobject+indiebandname.h
@inte***ce
nsobject (indiebandname)
@property (nonatomic, strong) nsstring *indiebandname;
@end
//這個和category無關,但是也是runtime.h的一種應用。dlintrospection,是 乙個nsobject category。它為nsobject提供了一系列擴充套件函式: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
@inte***ce通過這些函式,你可以在除錯時(通過po命令)或者執行時獲得物件的各種資訊。nsobject (dlintrospection)
+ (nsarray *)classes;
+ (nsarray *)properties;
+ (nsarray *)instancevariables;
+ (nsarray *)classmethods;
+ (nsarray *)instancemethods;
+ (nsarray *)protocols;
+ (nsdictionary *)descriptionforprotocol:(protocol *)proto;
+ (nsstring *)parentclasshierarchy;
@end
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方法...