DynamicAssociatedProperties 0.1.0

DynamicAssociatedProperties 0.1.0

测试已测试
语言语言 Objective C++Objective C++
许可证 MIT
发布最新发布2015年10月

由Victor Pavlychko维护。Victor Pavlychko.



介绍

DynamicAssociatedProperties库使用objc_getAssociatedObject/objc_setAssociatedObject自动生成category中使用@dynamic声明的属性的访问器,用于后端存储。

支持的属性属性

  • 使用运行时关联策略实现的strong、copy和assign属性
  • 使用值持有者对象实现的weak属性
  • 正确解析了自定义的getter和setter规范
  • 非对象类型自动包装为NSValue或NSNumber
  • 使用C++模板轻松生成对任何值类型的类型安全访问器

支持的类型

  • char
  • unsigned char
  • short
  • unsigned short
  • int
  • unsigned int
  • long
  • unsigned long
  • long long
  • unsigned long long
  • float
  • double
  • BOOL
  • CGPoint
  • CGVector
  • CGSize
  • CGRect
  • CGAffineTransform
  • UIEdgeInsets
  • UIOffset
  • CATransform3D
  • 您自己注册的任何自定义值类型

在分类中添加属性

要在分类中添加属性,只需像往常一样在*.h文件中声明它们

@interface AWTestClass (AWTestCategory)

@property (copy)   NSString  *awStringProperty;
@property (weak)   id         awWeakProperty;
@property (assign) NSInteger  awIntegerProperty;
@property (assign) CGRect     awCGRectProperty;

@end

并在*.m文件中定义为@dynamic。调用+[NSObject dynamicAssociatedPropertiesRegisterAll]将注册当前类的所有@dynamic属性。

#include <DynamicAssociatedProperties/DynamicAssociatedProperties>

@implementation AWTestClass (AWTestCategory)

@dynamic awStringProperty;
@dynamic awWeakProperty;
@dynamic awIntegerProperty;
@dynamic awCGRectProperty;

+ (void)load
{
    [self dynamicAssociatedPropertiesRegisterAll];
}

@end

为自定义类型添加支持

自定义值类型可以轻松注册,但类型安全的解决方案将需要Objective-C++文件。只需将您的实现文件重命名为*.mm,并遵循此语法

#include <DynamicAssociatedProperties/AccessorBlockFactoryRegistry.h>

@implementation AWTestClass (AWTestCategory)

+ (void)load
{
    AccessorBlockFactoryRegistry::instance().registerGetterAndSetterFactories<MyStructType>();
}

@end

当添加缺失的SDK结构体时,请考虑扩展NSObject+DynamicAssociatedProperties.mm,并提交拉取请求 ;)

安装

DynamicAssociatedProperties通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中

pod "DynamicAssociatedProperties"

要运行示例项目,克隆仓库,然后首先从Example目录中运行pod install。

替代方案

有几个可选项目可用

作者

维克多·巴夫利奇科,[email protected]

许可证

DynamicAssociatedProperties 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。