Category添加weak属性的精简版本
来源:互联网 发布:淘宝微能量运动旗舰店 编辑:程序博客网 时间:2024/06/05 03:45
网上有很多版本,我提供一种不用加新类就可以实现的方法。
创建NSObject的Category
NSObject+Ext.h
#import <Foundation/Foundation.h>typedef void (^DeallocBlock)();@interface NSObject (Ext)@property (nonatomic, weak) id weakObj;@property (nonatomic, copy) DeallocBlock block;@end
NSObject+Ext.m
#import "NSObject+Ext.h"#import <objc/runtime.h>static NSString *WEAK_KEY = @"weakObj";static NSString *BLOCK_KEY = @"block";@implementation NSObject (Ext)- (id)weakObj { return objc_getAssociatedObject(self, &WEAK_KEY);}- (void)setWeakObj:(id)weakObj { [weakObj setBlock:^() { objc_setAssociatedObject(self, &WEAK_KEY, nil, OBJC_ASSOCIATION_ASSIGN); }]; objc_setAssociatedObject(self, &WEAK_KEY, weakObj, OBJC_ASSOCIATION_ASSIGN);}- (DeallocBlock)block { return objc_getAssociatedObject(self, &BLOCK_KEY);}- (void)setBlock:(DeallocBlock)block { objc_setAssociatedObject(self, &BLOCK_KEY, block, OBJC_ASSOCIATION_COPY_NONATOMIC);}#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"- (void)dealloc { self.block ? self.block() : nil; objc_setAssociatedObject(self, &BLOCK_KEY, nil, OBJC_ASSOCIATION_ASSIGN);}#pragma clang diagnostic pop@end
测试用法
NSObject *obj1 = [NSObject new];NSObject *obj2 = [NSObject new];obj1.weakObj = obj2;NSLog(@"%@", obj1.weakObj);obj2 = nil;NSLog(@"%@", obj1.weakObj);
0 0
- Category添加weak属性的精简版本
- iOS 给类别(Category)添加weak (property)属性,关联(Associated)
- 给Category添加属性
- Category添加属性
- category添加属性
- category动态添加属性
- Category添加属性字段
- Category 动态添加属性
- ios用category添加属性
- 分类(Category) 中添加属性
- Category添加属性(关联)
- iOS 给category添加属性的小技巧
- iOS开发之category动态添加属性的方法------关联
- Category能否给已有类添加新的属性
- 由category为什么不能添加属性所想到的
- iOS Category中添加属性和成员变量的区别
- Category添加属性与成员变量
- category 给IOS原生类添加属性
- description方法
- 深度增强学习David Silver(一)——介绍
- maven阿里云中央仓库
- leetcode 8
- 《google软件测试之道》读书笔记
- Category添加weak属性的精简版本
- bzoj 2432: [Noi2011]兔农 (数论+矩阵乘法)
- JFinal
- 旋转矩阵与四元数
- 实现三个并排div,两边固定宽度,中间自适应的四个方法
- tcpdump命令
- hibernate的方法运用
- 566. Reshape the Matrix
- dubbo Filter源码分析