iPhone Dev - 关于自动释放以及我正在做的事情是不是安全的问题

Posted

技术标签:

【中文标题】iPhone Dev - 关于自动释放以及我正在做的事情是不是安全的问题【英文标题】:iPhone Dev - Question about autorelease and whether what I'm doing is safeiPhone Dev - 关于自动释放以及我正在做的事情是否安全的问题 【发布时间】:2011-07-18 14:17:15 【问题描述】:

我的应用程序的方法中有以下代码:

NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

[someObject someMethodThatTakesAnArray:array];

我知道 arrayWithObjects 方法返回一个自动释放的数组。这是否意味着我应该在制作后直接保留它?是否保证在我将数组传递给 someMethodThatTakesAnArray 之前不会耗尽自动释放池?当它进入方法时呢?如果我从不保留它,当我在 someMethodThatTakesAnArray 中使用它时,该数组可能会消失,不是吗?

【问题讨论】:

【参考方案1】:

直到它所服务的线程的事件循环的下一次传递,自动释放池才会被耗尽。只要您在当前方法中工作,就不会发生这种情况。所以是的,数组对于 someMethodThatTakesAnArray: 使用是安全的;你不用担心。

事件管理:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html

内存管理:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

【讨论】:

好的,谢谢。您知道我可以使用哪些好的资源来了解有关事件循环及其工作原理的更多信息吗? @Tim:再添加一个链接供您阅读。 @Tim 不要忘记接受对你有帮助的答案——它可以帮助其他人知道哪些答案是好的,让人们在未来更有可能回答你的问题,并让社区不断发展【参考方案2】:

在您的方法返回之前,自动释放池没有机会耗尽。你在这里做的很好,如果你不需要这个数组,只是把它传递给-someMethodThatTakesAnArray:

【讨论】:

以上是关于iPhone Dev - 关于自动释放以及我正在做的事情是不是安全的问题的主要内容,如果未能解决你的问题,请参考以下文章

Iphone 打开 gl es 应用程序和自动释放池

在 iPhone 上使用自动释放时如何解决问题?

何时释放带有“自动释放”的对象?

内存泄漏与自动释放的字符串 iphone

iPhone:自定义自动释放池中的崩溃

如何在 iPhone / iPad 的应用程序中正确使用保留和释放