我正试图在我的一个iOS程序中查找内存泄漏。我想我已经把它钉在了几条类似的线上:
NSString *s1Upper = [s1 uppercaseString];
s1Upper = [s1Upper stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
(我知道这两行从逻辑角度来看没有意义,只是说明了我的记忆问题。)
让我们说s1是@“abc”(以空格结尾)。我理解NSStrings的方式,s1Upper指向第一行代码后面的一个NSString(@“ABC”以空格结尾)。在第二行之后,它指向不同的NSString(@“ABC”没有空格)。
我的问题:第一个NSString何时发布?
我的猜测是当当前的NSAutoreleasePool耗尽时会释放它。在这种情况下,我有一个后续问题:我如何影响这个并控制排水?
答案 0 :(得分:2)
它已自动释放,即在自动释放池耗尽时释放。通常在当前运行循环结束时。
在这种情况下,您无法真正改变它。你可以做的是retain
它,release
以后当你知道它是安全的时候。这将阻止它与自动释放池排水管一起解除分配。
您无法停止自动将这些对象转到自动释放池,因为该方法的内部实现会这样做。您只能通过保留对象来确保自动释放不会将保留计数降为零。