如何发布使用 objective C 中的类别添加的副本 属性?
how to release copy property added using category in objective C?
我已经使用类别向 UITableViewCell 添加了一个副本 属性,如下所示
NSString const *key = @"CellSelectedBlockKey";
@interface UITableViewCell (CellSelectionBlock)
@property (nonatomic, copy) CellSelectedBlock cellSelectedBlock;
@end
@implementation UITableViewCell (CellSelectionBlock)
- (void)setCellSelectedBlock:(void(^)(UITableView *table, NSIndexPath *indexpath))cellSelectedBlock
{
objc_setAssociatedObject(self, &key, cellSelectedBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (CellSelectedBlock)cellSelectedBlock
{
return objc_getAssociatedObject(self, &key);
}
@end
我将如何清除内存(释放),这个 属性 因为我不能为此覆盖 dealloc 方法。
对于这方面的任何帮助,我将不胜感激。关于将 属性 添加到现有 class 而无需 subclass 的最佳方法的任何建议。
具有强引用关联对象策略(OBJC_ASSOCIATION_RETAIN
、OBJC_ASSOCIATION_RETAIN_NONATOMIC
、OBJC_ASSOCIATION_COPY
或OBJC_ASSOCIATION_COPY_NONATOMIC
)的关联对象集在新值时自动释放为同一个键设置(或 nil
设置为清除),或者当父对象被释放时,就像 retain
/copy
属性一样,或者在 ARC 中使用强引用.
我已经使用类别向 UITableViewCell 添加了一个副本 属性,如下所示
NSString const *key = @"CellSelectedBlockKey";
@interface UITableViewCell (CellSelectionBlock)
@property (nonatomic, copy) CellSelectedBlock cellSelectedBlock;
@end
@implementation UITableViewCell (CellSelectionBlock)
- (void)setCellSelectedBlock:(void(^)(UITableView *table, NSIndexPath *indexpath))cellSelectedBlock
{
objc_setAssociatedObject(self, &key, cellSelectedBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (CellSelectedBlock)cellSelectedBlock
{
return objc_getAssociatedObject(self, &key);
}
@end
我将如何清除内存(释放),这个 属性 因为我不能为此覆盖 dealloc 方法。
对于这方面的任何帮助,我将不胜感激。关于将 属性 添加到现有 class 而无需 subclass 的最佳方法的任何建议。
具有强引用关联对象策略(OBJC_ASSOCIATION_RETAIN
、OBJC_ASSOCIATION_RETAIN_NONATOMIC
、OBJC_ASSOCIATION_COPY
或OBJC_ASSOCIATION_COPY_NONATOMIC
)的关联对象集在新值时自动释放为同一个键设置(或 nil
设置为清除),或者当父对象被释放时,就像 retain
/copy
属性一样,或者在 ARC 中使用强引用.