Objective-C學習—category與associative

category與associative做爲objective-c的擴展機制的兩個特性,category即類型,能夠經過它來擴展方法;associative,能夠經過它來擴展屬性;在iOS開發中,可能category比較常見,相對的associative,就用的比較少,要用它必須使用<objc/runtime.h>的頭文件,而後就能夠自由使用objc_getAssociatedObject以及objc_setAssociatedObject。objective-c

 

category不用多說,associative有一點須要注意:函數

 

斷開關聯是使用objc_setAssociatedObject函數,傳入nil值便可。atom

接着列表7-1中的程序,咱們能夠使用以下的代碼來斷開字符串overview和arry之間的關聯:spa

objc_setAssociatedObject(array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN);  code

其中,被關聯的對象爲nil,此時關聯策略也就可有可無了。
使用函數objc_removeAssociatedObjects能夠斷開全部關聯。一般狀況下不建議使用這個函數,由於它會斷開全部關聯。只有在須要把對象恢復到「原始狀態」的時候纔會使用這個函數。對象


category與associative結合blog

在category的.h中ci

1 #import <UIKit/UIKit.h>
2 #import <objc/runtime.h>
3 @interface UIView (Extension)
4     
5 @property (nonatomic,strong) NSString *test;

 

而後在相應的.m文件實現它的getter,setter方法開發

 1 -(void)setTest:(NSString *)test
 2 {
 3       // "test"爲(const void *)字符串
 4     objc_setAssociatedObject(self, "test", test, OBJC_ASSOCIATION_RETAIN);
 5 }
 6     
 7 -(NSString *)test
 8 {
 9     return objc_getAssociatedObject(self, "test");
10 }

 

只須要以下調用就能夠了:這樣就至關於給UIView加了一個屬性test;rem

1 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
2 button.test = @"test";

 

參考:http://hi.baidu.com/utfnjhuvkdeoqrr/item/f1bac8d8879b163021e25075

相關文章
相關標籤/搜索