美文网首页
OC对象弱引用

OC对象弱引用

作者: 扯淡的青春_ | 来源:发表于2018-07-22 22:18 被阅读0次

对象添加到集合引用计数不+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

相关文章

  • OC对象弱引用

    对象添加到集合引用计数不+1的几种方式: 1.weakObject 2.NSHashTable 3.NSMapTa...

  • iOS weak和strong的区别

    weak是弱引用,strong是强引用,一个oc对象如果没有一个强引用会被系统回收,弱引用会指向这个对象但是不能保...

  • Swift与OC差异 - 基础概念

    弱引用、强引用 OC Swift 懒加载 OC Swift

  • iOS SideTable

    SideTable主要存放了OC对象的引用计数和弱引用相关信息。定义如 下: SideTable的定义很清晰有三个...

  • __weak简析

    弱引用在oc中被经常用到的,用__weak修饰的对象不会引用计数+1,不会被强引用。那么__weak是怎么做到的呢...

  • iOS ARC下 weak 和 assign 的区别

    一、相似 1.都可以修饰对象类型,但是assign修饰对象会存在问题。 2.都是弱引用类,不能保住 OC 对象的生...

  • iOS研发工程师面试中遇到的问题1

    1、什么是强引用,什么是弱引用? 强引用持有对象,弱引用不持有对象。strong的对象会使retainCount+...

  • 十五、Block之(七)Block的__block(修饰OC对象

    一、强指针引用的block,内部引用OC对象的局部变量(oc对象的变量)。 二、总结。

  • 内存管理

    OC对象的内存管理 1、在iOS中,使用引用计数来管理OC对象的内存,一个新创建的OC对象引用计数默认是1,当引用...

  • 十四、Block之(六)Block的__block的内存管理

    一、强指针引用的block,内部引用OC对象的局部变量。 强指针引用的block,内部引用OC对象的局部变量,需要...

网友评论

      本文标题:OC对象弱引用

      本文链接:https://www.haomeiwen.com/subject/gmbrmftx.html