Утечка NSAutoreleasePool - PullRequest
       10

Утечка NSAutoreleasePool

0 голосов
/ 11 ноября 2010

Я работаю над приложением и у меня осталась 1 утечка.Протекший объект - NSAutoreleasePool, размер - 32 байта.В трассировке стека вызываются только основные методы.Я понятия не имею, как решить эту проблему.

В симуляторе нет сообщений об утечках, на устройстве только эта утечка.

Есть идеи?

Автозапуск - это то, что я определяю сам.

В моем viewcontroller я вызываю:

[self performSelectorInBackground:@selector(getDetailInfo:) withObject:self.infoID];

Это getDetailInfo:

- (void)getDetailInfo:(NSString *)theID {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    DetailInfo *info = [[DataProvider sharedInstance] getDetailInfo:theID]; //the return object is autoreleased.
    [self performSelectorOnMainThread:@selector(updateViewWithDetailInfo:) withObject:info waitUntilDone:NO];

    [pool release];
}

Некоторая дополнительная информация:

Для тестирования я изменил всемои методы, которые были вызваны с помощью executeSelectorInBackground для запуска в главном потоке и удалили эти автозапуска.

Я все еще получил утечку на NSAutoreleasePool.Сегодня я узнал, что вы можете показывать «Имя библиотеки» в трассировке стека в инструментах.:-) Я скопировал его ниже, и вы можете увидеть MapKit в строках 6 и 7.

0 libSystem.B.dylib calloc
1 libobjc.A.dylib _internal_class_createInstanceFromZone
2 libobjc.A.dylib class_createInstance
3 CoreFoundation +[NSObject(NSObject) allocWithZone:]
4 Foundation +[NSAutoreleasePool allocWithZone:]
5 CoreFoundation +[NSObject(NSObject) alloc]
6 MapKit TileCachePrivate::runCacheThread()
7 MapKit _runCacheThread(void*)
8 libSystem.B.dylib _pthread_start
9 libSystem.B.dylib thread_assign_default

Этот код для просмотра карты:

    MKMapView *omgeving = [[MKMapView alloc] initWithFrame:CGRectMake(11, 22, 298, 297)];
    omgeving.delegate = nil;
    [self addSubview:omgeving];
    [omgeving release];     

Если я закомментирую MapViewкод, нет утечки.Если я оставлю это, я получу утечку.

Leaked Object       #   Address     Size    Responsible Library Responsible Frame
NSAutoreleasePool       0x6a52e50   32      Foundation          +[NSAutoreleasePool allocWithZone:]

Спасибо за все комментарии до сих пор.Есть предложения?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Известная проблема: https://devforums.apple.com/message/282497#282497

Спасибо, что подумали.

0 голосов
/ 11 ноября 2010

Я обнаружил, что утечка NSAutoreleasePool часто указывает на неправильный NSAutoreleasePool.Используете ли вы NSAutoreleasePool в getDetailInfo DataProvider?А как насчет абонента?

Я читал ранее, что слив внешнего NSAutoreleasePool должен истощать внутренние, но я не нашел, что это так.drain предпочтительнее release на NSAutoreleasePool.Но это не твоя проблема.

...