iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSHashTable保留弱参考大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因此,Apple的[NSHashTable weakObjectsHashTable]文档指出:

所以,当我运行以下代码时……

NSHashTable *hashTable = [NSHashTable weakObjectsHashTable];
ABC *object = [[ABC alloc] init];
[hashTable addObject:object];
NSLog(@"%@",[hashTable anyObject]);
object = nil;
NSLog(@"%@",[hashTable anyObject]);

输出是:

2017-09-18 12:57:02.801 Test2[6912:640614] <ABC: 0x6
  

  014eb0>
2017-09-18 12:57:02.801 Test2[6912:640614] <ABC: 0x6
  

  014eb0>
2017-09-18 12:57:02.803 Test2[6912:640614] dealloc // (dealloc of ABC)

它看起来像调用NSLog(@“%@”,[hashTable anyObject]);保留对象.

如果我打电话,

NSHashTable *hashTable = [NSHashTable weakObjectsHashTable];
ABC *object = [[ABC alloc] init];
[hashTable addObject:object];
//NSLog(@"%@",[hashTable anyObject]);

产量如预期:

2017-09-18 13:00:23.949 Test2[6936:645459] dealloc
2017-09-18 13:00:23.949 Test2[6936:645459] (null)

谁能告诉我我的误解在哪里?

解决方法

您甚至不必调用NSLog – 只需执行[hashTable anyObject]即可使对象保持不变.原因似乎是anyObject返回一个自动释放的引用,它不会被释放:d直到将来的某个点.将整个事物包装在@autorelease块中,我相信它会按预期工作.

一般来说,确定ARC:ed对象何时会被释放是很危险的,因为有很多这样的魔法.

大佬总结

以上是大佬教程为你收集整理的ios – NSHashTable保留弱参考全部内容,希望文章能够帮你解决ios – NSHashTable保留弱参考所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。