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 dlintrospection
複製**
這個和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命令)或者執行時獲得物件的各種資訊。
如果你剛接觸ios,這個教程不要希望一次能看的非常透徹,學一定階段反回來再看看又會有新的體會的,希望每一位同學都能找到自己的方向。
讓Category支援新增屬性與成員變數
category是objective c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。一種常見的辦法是通過runtime.h中objc getassociatedobject objc setassociatedobject來...
Category新增屬性與成員變數
category是objective c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。一種常見的辦法是通過runtime.h中objc getassociatedobject objc setassociatedobject來...
iOS為Category新增屬性
一般認為category不能新增變數,其實可以使用 dynamic 來動態新增的。即執行時runtime 分類裡面不能新增ivar是因為分類本身並不是乙個真正的類,它並沒有自己的isa。原文出自 1.建立uiviewcontroller的類別並新增幾個屬性 import inte ce uiview...