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

2021-07-04 08:39:45 字數 1356 閱讀 7024

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