利用類別 Category 為物件新增」例項變數」

2021-06-24 11:45:03 字數 913 閱讀 9932

**: 利用類別category為物件新增例項變數/

屬性擴充套件用objc_setassociatedobject,objc_getassociatedobject,

方法擴充套件用category

主要利用objectivec的c api中函式:

void objc_setassociatedobject(id object, const void *key, id value, objc_associationpolicy policy)

id objc_getassociatedobject(id object, const void *key)

好了,現在直接寫怎麼做了.

1.在定義類別之前, 引入runtime.

#import
2.定義&實現類別(以uiview為例)

定義:

@inte***ce uiview(addvariables)

@property (nonatomic, retain) nsstring *viewname;

@end

實現:

// 定義訪問的key

static const char *viewnamekey = "viewnamekey";

@implementation uiview(addvariables)

// get方法

- (nsstring *)viewname

// set方法

- (void)setviewname:(nsstring *)newviewnamekey

@end

3.呼叫測試:

- (void)viewdidload
輸出結果如下:

testview's newpropery:nori's view

利用類別 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)延展(extension)

objective c中提供了可以讓我們擴充套件類定義的手段 類目,延展和協議。類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 協議 協議宣告了可以被任何類實現的方法。1.類目 類別 category 1 宣告類目 inte ce testmodel newmodel ...

類別 category 以及類擴充套件

1.可以把類別看做是可擴充套件類的介面,而無需對類進行子類化。形式如下 inte ce nsstring extension void method end implementation nsstring extension void method end 2.類別不可以有新的例項變數,只包含方法。...