Предупреждение Clang: значение, сохраненное в 'pool' во время его инициализации, никогда не читается - PullRequest
5 голосов
/ 09 июня 2011
- (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];
}

Я не понимаю, почему этот код получает такое предупреждение, тем более, что он имеет почти точно такую ​​же структуру, что и основная функция в main.m, сгенерированная самим Xcode, который не получает того же предупреждения:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

1 Ответ

5 голосов
/ 09 июня 2011

Я считаю, что проблема в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...