xuzhongping / PingDynamicSynthesizer

Auto synthesize setter getter methods for category

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PingDynamicSynthesizer

Auto synthesize setter getter methods for category

Version Pod License iOS 6.0+ ARC

自动为你的Category中的property合成属性(setter gettter) 实现思路可参考本文:老生常谈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

联系我

可以将发现的问题或有好的建议告诉我,邮箱: 1021057927@qq.com

可以直接在此提 Issues 与 pull

License

PingDynamicSynthesizer is available under the MIT license. See the LICENSE file for more info.

About

Auto synthesize setter getter methods for category

License:MIT License


Languages

Language:Objective-C 97.6%Language:Swift 1.9%Language:Ruby 0.5%