- (void)main {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Warning goes here
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
while (YES) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
[runLoop run];
[subPool drain];
}
[pool drain];
}
我不明白为什么这段代码会出现这样的警告,特别是当它与Xcode本身生成的main.m中的main函数几乎完全相同时,它没有得到相同的警告:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
答案 0 :(得分:5)
我认为问题是while (YES)
声明。 Clang认为这是一个永无止境的无限循环,因此永远不会触及该块下面的代码。
只需将其更改为以下内容(BOOL
变量设置为块外的YES
即可删除警告:
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
BOOL keepRunning = YES;
while (keepRunning) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
[runLoop run];
[subPool drain];
}
[pool drain];
return 0;
}