分类添加属性之关联引用
来源:互联网 发布:淘宝空间图片协议在那 编辑:程序博客网 时间:2024/05/27 14:15
分类是不能合成属性的,因为合成属性会生成对应的实例变量,而分类是不允许添加实例变量的(实例变量所在内存区域已初始化为不可更改,无法在动态运行时修改之)。
虽然不能增加实例变量,但是添加属性还是可以的,只不过需要自己在分类中实现get和set方法,同时标记属性为动态获取。
其中一种方法叫做关联引用,实现了用存取器来访问属性,当然实际上并没有实例变量,所以本质上只不过是增加了两个方法而已。
首先在.h中声明属性:
#import <UIKit/UIKit.h>@interface UIViewController (PropertyTest)@property (nonatomic, copy) NSString *testProperty;@end然后在.m中实现:
#import "UIViewController+PropertyTest.h"#import <objc/runtime.h>const char kTestProperty;//声明一个唯一地址的key。或用static char <span style="font-family: Arial, Helvetica, sans-serif;">kTestProperty;</span>@implementation UIViewController (PropertyTest)@dynamic testProperty;//运行时动态获取- (void)setTestProperty:(NSString *)testProperty{ objc_setAssociatedObject(self, &kTestProperty, testProperty, OBJC_ASSOCIATION_COPY_NONATOMIC);}- (NSString *)testProperty{ return objc_getAssociatedObject(self, &kTestProperty);}@end然后用代码测试一下:
self.testProperty = @"testProperty"; self.testProperty = [self.testProperty stringByAppendingString:@"add string"]; NSLog(@"%@", self.testProperty);打印如下:
2015-05-17 15:12:36.816 Test_5_17[3508:1209580] testPropertyadd string可见实现了属性的get和set功能。
0 0
- 分类添加属性之关联引用
- 分类添加属性之关联引用
- iOS - 分类添加属性之关联引用
- runtime学习之- 关联(association),在分类中添加属性!
- runtime学习之- 关联(association),在分类中添加属性!
- Runtime之分类添加属性
- Objective-C 给分类添加属性——关联对象
- Runtime 归档 , KVC , 分类添加属性 , 关联等用法.
- 分类添加属性
- 分类添加属性,_cmd。
- iOS开发之category动态添加属性的方法------关联
- OC的运行时关联,可以类似于为分类添加属性.
- runtime之关联引用
- Runtime应用之归档 , KVC , 分类添加属性
- Runtime应用之归档 , KVC , 分类添加属性
- Category添加属性(关联)
- runTime之属性关联
- iOS为分类添加属性
- 进程和线程的联系和区别
- eclipse中导入Android项目
- HTML表单总结
- Android LayoutInflater详解
- unity开发相关环境(vs、MonoDevelop)windows平台编码问题
- 分类添加属性之关联引用
- 第十一周项目1 - 存储班长信息的学生类(1、完成类中成员的定义)
- [leetcode][DP] Edit Distance
- Animation及其子类相关说明
- java工程师应该学习的知识点
- 第11周-继承与派生-项目二-储存班长信息的学生类(二)
- 《打破思维的墙》读后感
- sgu-246 Black & White
- 山东省第六届ACM竞赛 Lowest Unique Price(set+map)分析,总结