iPhone Dev - 关于autorelease的问题以及我正在做的事情是否安全

时间:2011-07-18 14:17:16

标签: iphone objective-c autorelease nsautoreleasepool

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

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

[someObject someMethodThatTakesAnArray:array];

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

2 个答案:

答案 0 :(得分:3)

自动释放池在其服务的线程的事件循环的下一次传递之前不会被耗尽。只要你在当前的方法中工作,那就不会发生。所以是的,数组是安全的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

答案 1 :(得分:1)

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