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文档中警告反馈是什么关于通过引用传递?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)