OC对象弱引用

对象添加到集合引用计数不+1的几种方式:

1.weakObject

TestModel *model = [[TestModel alloc] init];
NSLog(@"添加集合前:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

// @property (nonatomic, weak) id value;
WeakObject *wo = [[WeakObject alloc] init];
wo.value = model;

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:wo];
NSLog(@"添加集合后:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

2.NSHashTable

TestModel *model = [[TestModel alloc] init];
NSLog(@"添加集合前:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
[hashTable addObject:model];

NSLog(@"添加集合后:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

3.NSMapTable

TestModel *model = [[TestModel alloc] init];
NSLog(@"添加集合前:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

NSMapTable *mapTable = [NSMapTable weakToWeakObjectsMapTable];
[mapTable setObject:model forKey:@"test"];

NSLog(@"添加集合后:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

4.NSPointerArray

TestModel *model = [[TestModel alloc] init];
NSLog(@"添加集合前:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1

NSPointerArray *pointerArray = [NSPointerArray weakObjectsPointerArray];
[pointerArray addPointer:(__bridge void * _Nullable)(model)];

NSLog(@"添加集合后:%ld", (long)CFGetRetainCount((__bridge CFTypeRef)model)); // RetainCount:1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容