如果没有自动释放池,我正在尝试捕捉场景。
这是我的测试应用程序。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self performSelectorInBackground:@selector(bgOperation:) withObject:nil];
}
- (void)bgOperation:(id)obj
{
NSString *string [[[NSString alloc] init] autorelease];
}
我试过设置断点 objc_autoreleaseNoPool。
我尝试过使用 Instruments / Leaks 进行分析。
OSX 10.7.5 XCode 4.3.3 以 10.6 为目标,AutomaticRefCounting = NO,GarbageCollection = 不支持。
我了解 NSApplication 包括它自己的自动释放池。但我的理解是每次调用 performSelectorInBackground: 都需要它自己的自动释放池。
来自建议的更新:我
在 main.m 中
尝试过这个..没有运气。
int main(int argc, char *argv[])
{
NSString *junk = [[[NSString alloc]init]autorelease];
return NSApplicationMain(argc, (const char **)argv);
}
而这个..
在我的appDelegate中,也没有结果。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSThread detachNewThreadSelector:@selector(bgOperation:)
toTarget:self
withObject:nil];
}
而这个..
在我的 main.m 中使用 pthreads
void *doJunk(void *ptr){
NSString *junk = [[[NSString alloc]initWithString:@"string with no pool"]autorelease];
NSLog(@"%@", junk);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t thread;
pthread_create(&thread, NULL, doJunk, NULL);
return NSApplicationMain(argc, (const char **)argv);
}
我知道由于操作系统级别可能没有任何泄漏(仍未确认),但是当我瞄准 10.6 时,我在日志中看到许多“无池”消息。如果它只是由于操作系统级别而泄漏,那么当我的目标是 10.6 但使用 10.7 SDK 时,我需要一种方法来在 10.7 中捕获这些场景。