ios – 在ARC文档中警告反馈是什么关于通过引用传递?

ios – 在ARC文档中警告反馈是什么关于通过引用传递?,第1张

概述在Apple关于ARC的文档中,他们提出了一个拼写问题的场景,ARC将在幕后生成一个样板临时变量。搜索“编译器因此重写”: https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html 警告的要点似乎是因为基于堆栈的变量是“强” 在Apple关于ARC的文档中,他们提出了一个拼写问题的场景,ARC将在幕后生成一个样板临时变量。搜索“编译器因此重写”:

https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

警告的要点似乎是因为基于堆栈的变量是“强”的,而被调用的方法(performOperationWithError :)的副引用参数是自动释放的,ARC将生成一个临时的局部变量来满足内存管理需求自动释放变量。但是由于临时变量被分配给样板示例中的强变量,因此从客户端的角度来看似乎没有风险。

这些文件究竟是在痛苦地警告我们呢?作为可能以这种方式调用的方法(具有自动释放的返回值参数)的客户端或作为实现者的风险是什么?

解决方法 这只是一个关于不太理想的表现的警告。在重写的代码中,“tmp”指向的NSError返回自动释放,分配给“error”时保留,然后当“错误”超出范围时再次释放。

如果您将原始代码中的声明更改为:
NSError __autoreleasing *错误;

如果你这样做,没有任何一个temp的赋值,并且隐式的保留然后释放不再发生。 (NSError对象本身仍然是有效的,因为它仍然在自动释放池中。)因此,文档警告您,如果使用“错误”变量限定符,它可以导致额外的保留计数不会要求这样做。

还要注意,使用任一版本的代码:因为有问题的变量是通过引用传递的,而不是来自-performOperationWithError的返回值,所以没有机会做出ARC可以做的魔术堆栈步骤来保存第一个进入自动释放池的对象。

总结

以上是内存溢出为你收集整理的ios – 在ARC文档中警告反馈是什么关于通过引用传递?全部内容,希望文章能够帮你解决ios – 在ARC文档中警告反馈是什么关于通过引用传递?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1035575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存