iphone - 使用ARC时,[[NSArray alloc] init]和 "autorelased"[NSArray array]之间有区别吗?

标签 iphone objective-c automatic-ref-counting

Possible Duplicate:
Objective-C: With ARC, what's better? alloc or autorelease initializers?

ARC 是否会自动将类初始值设定项的自动释放版本转换为适当的非自动释放版本,或者它们在技术上仍然是自动释放的?

我不想保留内存超过绝对需要的时间,所以我已经养成了在几乎所有情况下使用 alloc/init 的习惯。现在在 ARC 中,我想知道是否可以开始使用“自动释放”初始化程序并期望它们像非自动释放版本一样运行......

有谁有任何文档可以告诉我在 ARC 下自动释放方法会发生什么情况吗?

最佳答案

当您获得自动释放对象时,ARC 将设法避免自动释放池,只要您的代码和调用的方法/函数都是使用 ARC 编译的

ARC 在代码中添加对 objc_retainAutoreleasedReturnValue 的调用,并在被调用的函数/方法中添加对 objc_autoreleaseReturnValue 的调用。在运行时,当 objc_autoreleaseReturnValue 发现返回值将由 objc_retainAutoreleaseReturnValue 保留时,它不会自动释放该对象并设置一个标志来告诉 objc_retainAutoreleaseReturnValue不保留该对象。因此,使用方便的创建方法而不是 alloc/init 不会产生(明显的)额外成本。

有关该机制的更多信息,您可以阅读 How does objc_retainAutoreleasedReturnValue work?作者:马特·加洛韦。

总之,只要使用你喜欢的方法,Apple 工程师就会确保它运行得很快。

关于iphone - 使用ARC时,[[NSArray alloc] init]和 "autorelased"[NSArray array]之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194392/

相关文章:

iphone - .Plist 数组生成随机字符串到 UILabel

objective-c - 来自任何应用程序的数据使用

ios - 使用 xCode 4.3 的 iOS 中的泄漏检测问题

iphone - CoreData 中的重复名称?

ios - 在 Firebase 身份验证 Xamarin 中访问 UID 时出错

iphone - [UIView beginAnimations :context:] and [UIView animateWithDuration:animations:] 之间的区别

iphone - _var 和 self.var 的区别

objective-c - ARC __bridge cast Block_copy 和 Block_release

ios - 如何在 iOS 中使用 CLLocationManager 获取当前位置

objective-c - 添加 subview 似乎没有任何作用