iOS运行时场合一 category中添加(连接)对象(fake机制)

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(selfdefaultTextKey, defaultText, OBJC_ASSOCIATION_RETAIN); //set方法将声明的变量与程序段的指针连接起来

objc_getAssociatedObject(selfdefaultTextKey);//get方法是从程序段取出指针并访问对象(内容)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值