PingDynamicSynthesizer
自动为 Category 合成 setter getter 方法
自动为您 Category 中的 property 合成属性(setter getter) 实现思路可参考本文:老生常谈 Category 增加属性的几种操作
功能
自动为您在 Category 中写的 property 完成真正的属性合成。
支持主流的 JSON 转 MODEL 库。
支持属性修饰类型
- strong + nonatomic
- copy + nonatomic
- weak + nonatomic
- strong + atomic
- copy + atomic
- weak + atomic
- assign + atomic
支持的类型
- NSObject
- Class
- BOOL
- char
- short
- int
- long
- long long
- float
- double
- char *
- void *
- unsigned char
- unsigned short
- unsigned short
- unsigned int
- unsigned long
- unsigned long long
注意点
- 请在 Category 中严格按照 @property (nonatomic, copy) type *name 规格书写。
- 目前支持对象类型和大部分值类型属性合成,对于不支持的数据类型可用 NSValue 代替使用。
- 在多个 Category 环境下,此工具会自动检测出所有的 Category 和类本身所拥有的所有属性是否需要合成,不包括手动实现过 setter 或 getter 的属性;所以如果你想更合理地控制需要合成的属性,请实现 dynamicProperty 方法来返回需要合成的 key 数组。
更新
- 0.1.0
完成除 assign 之外的所有修饰词的对象类型的属性合成
- 0.1.1
协议方法改为 @optional ,在不实现协议方法时,自动合成所有没有实现 setter 或 getter 的 property,包括继承父类的 property,如果想要保证自定义返回需要合成的 property,请实现协议中的方法返回 key 的数组。
- 0.1.2
上版本的 weak 实现策略是我的失误写错了,这个版本修复了 weak 的策略。
- 0.2.0
不再需要手动调用方法进行合成了,只需要让 Category 遵守 DynamicPropertyProtocol 协议,就可实现自动合成。
- 0.2.1 (千万要记住设置字段,否则会导致无法自动合成)
防止在大型项目中因为 Category 的过多并合成而导致启动变慢,增加可选为手动合成,在项目中的 info.plist 中增加 PingDynamicSynthesizerInquiry 字段,为 BOOL 类型,当设为 YES 时表示自动合成,当设为 NO 时表示不自动而需要手动在每个地方合成。
- 0.2.2
支持 assign 策略
- 0.3.0
支持了大部分的值类型,不再只支持对象类型
使用方法
- 按照规范在category.h文件中书写property
@property (nonatomic, copy) NSString *name;
- category中遵守DynamicPropertyProtocol协议,并实现协议中的方法
@interface Person (Extra)<DynamicPropertyDataSource>
@implementation Person (Extra)
// 可不实现,自动合成所有没有实现setter或getter的property,包括继承父类的property
+ (NSArray *)dynamicProperty{
return @[@"name"]; // 返回需要合成属性的key数组
}
@end
- 当设为手动合成时,请在需要合成的时机调用如下代码
[PingDynamicSynthesizer ping_dynamicProperty:cls];
支持Cocoapods
pod 'PingDynamicSynthesizer'
- 如果您使用pod search命令找不到,请执行以下命令更新自己的Cocoapods官方索引库
pod repo update
联系我
您可以告诉我您发现的问题或好的建议,邮箱:[email protected]
您可以直接在此提Issue与pull
授权协议
PingDynamicSynthesizer在MIT授权协议下提供。有关更多信息,请参阅LICENSE文件。