Category 笔记 最新理解和动态添加属性

本文并不介绍什么是Category和Category好处,相信大家都知道Category里面是不能添加属性的,但是有没有试一下添加属性后会发生什么呢,或者有没有什么方法可以添加属性呢。

一:添加属性后会发生什么?

相信大家都知道程序会崩溃,确实崩溃。我今天试了一下如果直接添加成员变量的话,编译器直接报错,提示tagegories中不能存在实例变量 因此也就不能再实现里面添加@synthesize

如果是添加属性,不会自动生成 _属性 变量生成 则在.m文件中提示要实现getter和setter方法 ,编译器会产生一个警告,当你使用@dynamic告诉编译器你要自己生成getter 和setter方法 则使用时会崩溃 。况且getter和stter方法也没法写。没有对应的成员变量生成,如果用self. 来写势必会造成死循环。

以上都只是我个人自己测试的结果,相信大家都不会在Category中添加变量。

二:如何在Category中添加属性 在什么情况下会用到

我们都知道OC程序都是基于runtime的,程序运动的过程中都转行成了c语言的代码。runtime非常的强大可以在运行的时候添加属性和方法,也可以增加属性和方法。下面介绍的是Category中添加属性。

@property(nonatomic ,strong)NSString *userInfo;

-(void)setUserInfo:(NSString *)userInfo
{
    objc_setAssociatedObject(self, @"userInFO", userInfo, OBJC_ASSOCIATION_RETAIN);
}

-(NSString *)userInfo
{
    return objc_getAssociatedObject(self, @"userInFO");
}


以上属性名称 方法中的key值  属性名称stter方法和key值不需要一样,但是两个地方的key值必须一样。个人觉得userInfo属性和它的getter和setter方法只是提供了一个访问接口,里面和属性没有什么关系。这样在调用setter方法时会把传入的值和key绑定,调getter方法时又根据key值去取你绑定的值。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值