【问题标题】: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 中使用它时,该数组可能会消失,不是吗?

【问题讨论】:

    标签: iphone objective-c autorelease nsautoreleasepool


    【解决方案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:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多