IOS: предупреждение о утечке не ясно - PullRequest
0 голосов
/ 06 августа 2011

У меня есть два следующих метода:

-(void)playSound {
    NSString* filePath = [self getBasePath]; // <-- warnings appear when this is called
}

и

-(NSString*) getBasePath {
    if( debug ) NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];

    if( debug ) NSLog(@">>> Leaving %s <<<", __PRETTY_FUNCTION__);
    return documentsDir;
}

При вызове playsound вызывается метод getBasePath. Но тогда я получаю следующее предупреждение на консоли:

2011-08-06 00:26:56.298 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4e350e0 of class __NSArrayM autoreleased with no pool in place - just leaking
2011-08-06 00:26:56.299 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4e350c0 of class NSCFString autoreleased with no pool in place - just leaking
2011-08-06 00:26:56.300 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4b43c00 of class NSCFString autoreleased with no pool in place - just leaking
2011-08-06 00:26:56.300 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4b46900 of class NSPathStore2 autoreleased with no pool in place - just leaking
2011-08-06 00:26:56.301 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4e37630 of class NSPathStore2 autoreleased with no pool in place - just leaking
2011-08-06 00:26:56.302 Alarm[82648:5d03] *** __NSAutoreleaseNoPool(): Object 0x4e35100 of class __NSArrayI autoreleased with no pool in place - just leaking

Что это значит?

1 Ответ

3 голосов
/ 06 августа 2011

Возможно, вы выполняете этот метод не в главном потоке. Если вы это сделаете, вы должны создать NSAutoreleasePool.

-(void)playSound {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   int index = rand() % [soundFilenames count];
   NSString* filePath = [self getBasePath];
   [pool drain];
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...