iOSCategoryPropertyDynamicSupport icon indicating copy to clipboard operation
iOSCategoryPropertyDynamicSupport copied to clipboard

iOS Class Category property dynamic support

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