2011-06-09 12 views
5
- (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]; 
} 

No veo por qué este código recibe tal advertencia, especialmente cuando tiene casi exactamente la misma estructura que la función principal en main.m generada por sí mismo Xcode que no recibe la misma advertencia:advertencia Clang: el valor almacenado en 'pool' durante su inicialización nunca se lee

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

Respuesta

5

creo que el problema es la declaración while (YES). Clang lo ve como un ciclo sin fin del que nunca saldrás, de modo que nunca se alcanzará el código debajo de ese bloque.

Simplemente cambiar a la siguiente (un conjunto variable de BOOL a YES exterior del bloque) eliminará la advertencia:

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; 
} 
+0

muy buena respuesta –

Cuestiones relacionadas