iOS运行时场合一 category中添加(连接)对象(fake机制)
2015-09-07 15:46
537 查看
1.原生category是不能添加属性的,如果需要添加的话可以使用运行时连接一个变量(是连接而不是添加).
2.例子 比方说给uilabel 添加一个nsstring属性 叫做defaultText,这样我们一个label 就有有两个text可用了,这里单纯为了说明给category连接属性,至于实用性大家自行开发。
.h文件中声明一个字符串变量
#import <UIKit/UIKit.h>
@interface UILabel (custom)
@property(nonatomic,strong)NSString* defaultText;
@end
.m文件中连接一个指针指向这个字符串并重写set和get方法
#import "UILabel+custom.h"
#import <objc/runtime.h>
static const
void* defaultTextKey = &defaultTextKey;
@implementation UILabel (custom)
@dynamic defaultText;
//get方法
-(NSString*)defaultText
{
return
objc_getAssociatedObject(self,
defaultTextKey);
}
//set方法
-(void)setDefaultText:(NSString *)defaultText
{
objc_setAssociatedObject(self,
defaultTextKey, defaultText,
OBJC_ASSOCIATION_RETAIN);
// [self setText:defaultText];
}
@end
这样在使用uilabel的时候就有两个属性可用了
个人理解:static const void* defaultTextKey = &defaultTextKey;
在程序数据段声明一个指针;
objc_setAssociatedObject(self, defaultTextKey, defaultText, OBJC_ASSOCIATION_RETAIN);
//set方法将声明的变量与程序段的指针连接起来
objc_getAssociatedObject(self, defaultTextKey);//get方法是从程序段取出指针并访问对象(内容)。
2.例子 比方说给uilabel 添加一个nsstring属性 叫做defaultText,这样我们一个label 就有有两个text可用了,这里单纯为了说明给category连接属性,至于实用性大家自行开发。
.h文件中声明一个字符串变量
#import <UIKit/UIKit.h>
@interface UILabel (custom)
@property(nonatomic,strong)NSString* defaultText;
@end
.m文件中连接一个指针指向这个字符串并重写set和get方法
#import "UILabel+custom.h"
#import <objc/runtime.h>
static const
void* defaultTextKey = &defaultTextKey;
@implementation UILabel (custom)
@dynamic defaultText;
//get方法
-(NSString*)defaultText
{
return
objc_getAssociatedObject(self,
defaultTextKey);
}
//set方法
-(void)setDefaultText:(NSString *)defaultText
{
objc_setAssociatedObject(self,
defaultTextKey, defaultText,
OBJC_ASSOCIATION_RETAIN);
// [self setText:defaultText];
}
@end
这样在使用uilabel的时候就有两个属性可用了
个人理解:static const void* defaultTextKey = &defaultTextKey;
在程序数据段声明一个指针;
objc_setAssociatedObject(self, defaultTextKey, defaultText, OBJC_ASSOCIATION_RETAIN);
//set方法将声明的变量与程序段的指针连接起来
objc_getAssociatedObject(self, defaultTextKey);//get方法是从程序段取出指针并访问对象(内容)。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- ios通过按钮点击异步加载图片
- 加载带有手势识别器的XIB文件需注意哪些问题
- 仅需几行代码实现方便易用的状态栏指示器