ios - 你如何创建一个对象的 NSMutableArray,它不会增加添加到它的每个对象的保留计数?

标签 ios objective-c arrays

<分区>

所以在下面的例子中,是否可以以某种方式转换参数,使其变弱或其他什么?

-(void)addObject:(NSObject *)object {
    [self.collection addObject:object];
}

通过这样做,您肯定需要检查从“self.collection”中拉取的每个对象,以检查它是否是悬空指针,对吗?

最佳答案

我不知道你的问题的答案是什么,但是有一个类调用 NSHashTable 可以保存对其成员的弱引用。 你应该看看它。您使用以下选项对其进行初始化:

NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSHashTableWeakMemory];

其他选项是:

  • NSHashTableStrongMemory
  • NSHashTableCopyIn
  • NSHashTableObjectPointerPersonality

你使用它的方式与 NSArray 非常相似,但它是 NSSet 的通用模拟,所以如果你想存储非唯一对象,它可能对你不利:

[hashTable addObject:@"myObj1"];
[hashTable addObject:@"myObj2"];
[hashTable removeObject:@"myObj2"];

我不认为你可以用 NSArray 停止弱引用,但另一种选择是将对象包装在值中并存储值:

NSValue *val = [NSValue valueWithNonretainedObject:@"myObj1"];
[array addObject:val];

关于ios - 你如何创建一个对象的 NSMutableArray,它不会增加添加到它的每个对象的保留计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33550779/

上一篇:ios - 完整图像 Assets 未转换为 base64 字符串

下一篇:ios - 是否可以在应用程序中关闭设备(iPhone/iPad)?

相关文章:

javascript - 数组状态将缓存在 iOS 12 Safari 中。它是错误还是功能?

ios - 将 UIButton 添加到工具栏 swift 5

ios - 快速下载任务与请求文件下载不起作用

ios - 无法将值传递给下一个 UIViewController

html - 如何从 Angular 5 中的二维数组打印表格?

c++ - 将 double * 赋值给 V[3]

ios - 更新到 Xcode 5 后无法将应用安装到设备

ios - 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

iphone - 如何更改 UItabbar 图标图像?

arrays - 在 heredoc 中使用存储为 Bash 数组的命令