Skip to content

NathanLi/iOSCategoryPropertyDynamicSupport

Repository files navigation

iOSCategoryPropertyDynamicSupport

iOS Class Category property dynamic support

在运行时自动给分类的动态属性添加相应的 gettersetter 方法

在分类中添加一些自定义的属性的场景还是蛮多的。一般的方法是自定义其 gettersetter 方法,在这些方法
里面再用关联对象等手段来实现。虽然不难,却也麻烦且重复。
本类的目的在于解放这些重复的劳动。

 使用:
  1、导入本类及相关类(NSObject+nl_dynamicPropertySupport目录下)
  2、在分类中定义属性时,默认要以 nl_ 开头
  3、在分类的实现体中,给属性加上 @dynamic

 优点:
  1、所有的对象、基本数据类型
  2、支持系统已有的 [NSValue valueWith...] 方法的结构体(详见 NSValue )。如:CGRect
  3、支持 KVC
  4、支持 KVO
  5、支持 strong、copy、weak

 不足:
  1、不支持自定义的结构体。
   但可以通过 + nl_missMethodWithPropertyDescriptor:selector: 来实现。实现方法可见:(nl_dynamicPropertyCustomeStruct分类)
  2、注意:KVO 支持不完美。
   当观察动态生成的 weak 属性时,不会接收到 weak 自动设置为 nil 的通知(在 weak 指向的对象被销毁时,weak 属性会自动设置为 nil)。

##工作原理:   1、使用 Associated Objects
  2、OC runtime
  3、Type Encoding
  详见:http://nathanli.cn/2015/12/14/objective-c-%E5%85%83%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5-%E5%88%86%E7%B1%BB%E5%8A%A8%E6%80%81%E5%B1%9E%E6%80%A7/
   ##代码使用: 头文件 .h:

@interface YourClass (YourCategory)

@property NSString *nl_yourProperty;

@end

实现文件:

@implementation YourClass (YourCategory)

@dynamic nl_yourProperty;

@end

##自定义属性前辍
1、#import "NLDynamicPropertyPrefix.h"
2、 设置前辍 DynamicPropertySetPrefix("demo_")
注意,要在 m 文件中调用;前辍名长度不能为 0,你应该定义成字母加下划线的形式;不能重复调用。

 如果你有好的 idea 或 疑问,请随时提 issue 或 request。

##License Released under the MIT-license

About

iOS Class Category property dynamic support

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published