gpt4 book ai didi

iphone - NSAutoreleasePool 跨方法承载?

转载 作者:行者123 更新时间:2023-12-03 16:52:01 24 4
gpt4 key购买 nike

我正在构建一个 iPhone 应用程序,在其中分离一些线程以在后台执行长时间运行的工作,以免挂起 UI。我知道线程需要 NSAutoreleasePool 实例来进行内存管理。我不确定的是线程方法是否调用另一个方法 - 该方法是否也需要 NSAutoreleasePool?

示例代码:

- (void)primaryMethod {
[self performSelectorInBackground:@selector(threadedMethod) withObject:nil];
}

- (void)threadedMethod {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc] init];

// Some code here

[self anotherMethod];

// Maybe more code here

[aPool drain];
}

- (void)anotherMethod {
// More code here
}

我问的原因是我收到错误消息,对象在没有池的情况下被自动释放,并且“只是泄漏”。

我见过其他问题,人们根本没有设置自动释放池,我理解为什么需要自动释放池。我特别感兴趣的是找出(在本示例中)threadedMethod 中创建的自动释放池是否适用于在 anotherMethod 中创建的对象。

最佳答案

回答你的问题,是的,另一个方法正在使用你在 threadedMethod 中创建的 NSAutoreleasePool,并且当 aPool 被释放/耗尽时,你自动释放的任何东西都会被释放。

因此,您的错误不太可能直接源于此代码(除非发生更多情况)。

在 _NSAutoreleaseNoPool 上放置一个断点(在“断点”窗口中按名称添加它)并在调试器中运行代码,当在没有池的情况下调用 autorelease 时,它​​将停止,这应该可以解决您的问题。

关于iphone - NSAutoreleasePool 跨方法承载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com