如何给iOS 分类添加 属性
2016-05-27 00:00
393 查看
摘要: 比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了
比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了。
iOS扩展属性:category可以扩展类的方法,但是不能扩张类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用<obj/runtime.h>,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects.这几个方法的生命如下:
示例代码如下:
1、先创建一个person类
2、新建一个分类,运用associative添加属性
比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了。
iOS扩展属性:category可以扩展类的方法,但是不能扩张类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用<obj/runtime.h>,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects.这几个方法的生命如下:
示例代码如下:
1、先创建一个person类
#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, copy) NSString *name; @end #import "Person.h" @implementation Person @end
2、新建一个分类,运用associative添加属性
#import "Person.h" @interface Person (addproty) @property(nonatomic, copy)NSString *addr; @end #import "Person+addproty.h" #import <objc/runtime.h> @implementation Person (addproty) static char strAddrKey = 'a'; - (NSString *)addr { return objc_getAssociatedObject(self, &strAddrKey); } - (void)setAddr:(NSString *)addr { objc_setAssociatedObject(self, &strAddrKey, addr, OBJC_ASSOCIATION_COPY_NONATOMIC); } @end
相关文章推荐
- iOS ERROR: unable to get the receiver data from DB
- IOS博客项目搭建-16-发微博-点击button获取相册图片
- ios runtime基础应用
- 【iOS技术】Xcode+GitHub远程代码托管(GIT, SVN)
- iOS开发--遇到的友盟的几个坑
- iOS 多控制器之间的跳转和数据存储
- iOS 图片剪切
- 解决iOS上传图片后,图片方向错误的问题
- iOS开发中使用平率很高的宏定义
- ios时间戳和当前时间转换
- iOS 四舍五入
- iOS开发-进阶:沙盒操作与机制
- iOS开发:关键字说明
- 转发:招聘一个靠谱的 iOS
- iOS开发:关于屏幕旋转问题
- iOS简单、方便、好用的HZSigmentView
- iOS NSMutableAttributedString/NSAttributedString 富文本设置
- iOS Archive 后进入other items,generic XCode Archive
- iOS 获取一周的每一天
- iOS-OC-获取WiFi信息