PingDynamicSynthesizer 0.3.0

PingDynamicSynthesizer 0.3.0

JungHsu 维护。



  • JungHsu

PingDynamicSynthesizer

自动为 Category 合成 setter getter 方法

Version Pod License iOS 6.0+ ARC

自动为您 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

支持了大部分的值类型,不再只支持对象类型

使用方法

  1. 按照规范在category.h文件中书写property
@property (nonatomic, copy) NSString *name;

  1. category中遵守DynamicPropertyProtocol协议,并实现协议中的方法
@interface Person (Extra)<DynamicPropertyDataSource>

@implementation Person (Extra)

// 可不实现,自动合成所有没有实现setter或getter的property,包括继承父类的property
+ (NSArray *)dynamicProperty{
    return @[@"name"]; // 返回需要合成属性的key数组
}
@end

  1. 当设为手动合成时,请在需要合成的时机调用如下代码
 [PingDynamicSynthesizer ping_dynamicProperty:cls];

支持Cocoapods

pod 'PingDynamicSynthesizer'
  • 如果您使用pod search命令找不到,请执行以下命令更新自己的Cocoapods官方索引库
pod repo update

联系我

您可以告诉我您发现的问题或好的建议,邮箱:[email protected]

您可以直接在此提Issue与pull

授权协议

PingDynamicSynthesizer在MIT授权协议下提供。有关更多信息,请参阅LICENSE文件。