什么时候发布临时NSStrings?

时间:2012-04-17 22:11:32

标签: objective-c memory-management nsstring

我正试图在我的一个iOS程序中查找内存泄漏。我想我已经把它钉在了几条类似的线上:

NSString *s1Upper = [s1 uppercaseString];
s1Upper = [s1Upper stringByTrimmingCharactersInSet: 
    [NSCharacterSet whitespaceCharacterSet]]; 

(我知道这两行从逻辑角度来看没有意义,只是说明了我的记忆问题。)

让我们说s1是@“abc”(以空格结尾)。我理解NSStrings的方式,s1Upper指向第一行代码后面的一个NSString(@“ABC”以空格结尾)。在第二行之后,它指向不同的NSString(@“ABC”没有空格)。

我的问题:第一个NSString何时发布?

我的猜测是当当前的NSAutoreleasePool耗尽时会释放它。在这种情况下,我有一个后续问题:我如何影响这个并控制排水?

1 个答案:

答案 0 :(得分:2)

它已自动释放,即在自动释放池耗尽时释放。通常在当前运行循环结束时。

在这种情况下,您无法真正改变它。你可以做的是retain它,release以后当你知道它是安全的时候。这将阻止它与自动释放池排水管一起解除分配。

您无法停止自动将这些对象转到自动释放池,因为该方法的内部实现会这样做。您只能通过保留对象来确保自动释放不会将保留计数降为零。