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

相关文章
相关标签/搜索