iOS运行时初探-使用运行时机制向Category中添加属性
2016-06-18 15:58
387 查看
http://blog.csdn.net/liujinlongxa/article/details/46293705
了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category添加属性的情况,例如我们属性的
那这到底是怎么实现的呢?
iOS运行时机制,简单来说,就是苹果给开发这提供的一套在运行时动态创建类、添加属性/方法(不止这些,还有一些其他功能)的API,它是一套纯C语言的API,使用相应的API就可以通过Category给一个原本存在的类添加属性。
总算在5月的最后一天把这篇博客写完了,虽然内容很简单,但好歹还是没有违背自己之前定得一个月至少写一篇博客的计划。继续坚持,加油吧!
前言
了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category添加属性的情况,例如我们属性的UITableView的
section和
row属性,就是定义在一个名为
NSIndexPath的分类里的,如下
那这到底是怎么实现的呢?
iOS运行时机制简介
iOS运行时机制,简单来说,就是苹果给开发这提供的一套在运行时动态创建类、添加属性/方法(不止这些,还有一些其他功能)的API,它是一套纯C语言的API,使用相应的API就可以通过Category给一个原本存在的类添加属性。
实例
#import <Foundation/Foundation.h> #import <objc/runtime.h> @interface NSObject (CategoryWithProperty) /** * 要在Category中扩展的属性 */ @property (nonatomic, strong) NSObject *property; @end @implementation NSObject (CategoryWithProperty) - (NSObject *)property { return objc_getAssociatedObject(self, @selector(property)); } - (void)setProperty:(NSObject *)value { objc_setAssociatedObject(self, @selector(property), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end
这样就可以在Category中添加属性了。
后记
总算在5月的最后一天把这篇博客写完了,虽然内容很简单,但好歹还是没有违背自己之前定得一个月至少写一篇博客的计划。继续坚持,加油吧!
相关文章推荐
- IOS性能调优系列:使用Instruments动态分析内存泄漏
- Xamarin体验:使用C#开发iOS/Android应用
- ios 图片点击两次禁止保存或拷贝
- 【iOS】CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable
- iOS 获取系统时间
- IOS开发之Bug--使用KVC的易错情况
- 总结iOS9中的新的方法
- ios学习路线—iOS高级(AFNetworking)
- iOS 音视频合成
- iOS 开发抽屉效果 MMDrawerController
- ios学习路线—iOS高级(SDWebImage)
- iOS 绘制虚线
- iOS开发——多线程编程(GCD)
- iOS中 iOS10 权限崩溃问题 韩俊强的CSDN博客
- iOS中 iOS10 权限崩溃问题 韩俊强的CSDN博客
- IOS的用户数据本地保存
- iOS JSON转Model的库 MJExtension的基本使用指导
- iOS适配
- iOS 中单例的使用以及原理
- iOS---使用CAEmitterLayer制作发射粒子的特效