iPhone _NSAutoreleaseNoPool () проблема - PullRequest
2 голосов
/ 27 августа 2010

У меня есть это в моем main.m:

printf("make autorelease pool \n");
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"MyAppDelegate");
[pool release];
return retVal;

И я внезапно начал получать это, когда я запускаю свое приложение на симуляторе:

2010-08-27 11:09:35.909 MyApp[6224:207] *** _NSAutoreleaseNoPool(): Object 0x49107c0 of class NSPathStore2 autoreleased with no pool in place - just leaking

Stack: (0xe171f0x58d64 0x59ebd 0x599ee 0x600c7 0x31d016 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe018b1 0x8fe01057)

2010-08-27 11: 09: 35,911 MyApp [6224: 207] *** _NSAutoreleaseNoPool (): Object 0x49110c0 классаNSPathStore2 autoreleased, без бассейна на месте - просто утечка Stack: (0xe171f 0x58d64 0x5cd69 0x60335 0x601f1 0x31d016 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe018b1 0x8fe01057)

2010-08-27 11: 09: 35.912 MyApp [6224: 207] *** _NSAutoreleaseNoPool (): Object 0x4911ce0 класса NSPathStore2 autoreleased, без бассейна на месте - просто утечка Stack: (0xe171f 0x58d64 0x6902e 0x445545 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe018b1 0x8fe01057) делают autorelease рool

Кто-нибудь знает, что это вызывает?Любая помощь высоко ценится!

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Я думаю, что нашел то, что вызвало это. У меня есть метод для загрузки моих текстур, и его подпись выглядела так: + (void) load Очевидно, это вызывается при запуске приложения, даже если вы нигде не импортируете файл, содержащий метод. Изменение подписи на + (void) loadTexture предотвращает преждевременный вызов, тем самым исправляя «ошибку»!

Извините за ответ на мой вопрос. Надеюсь, это сэкономит кому-то время.

0 голосов
/ 27 августа 2010

Это, вероятно, из потока, где нет пула автоматического выпуска.Вы должны настроить собственный пул автоматического выпуска для каждого потока.Даже если вы просто используете NSOperation или [NSObject performSelectorInBackground:withObject:], вы должны поместить пул авто-релиза на место.

Примечание: NSAutoreleasePool должен быть освобожден с использованием метода drain.Этот метод вызывает release и эквивалентен в средах без сбора мусора, таких как iOS 4. Это просто хороший стиль, чтобы всегда использовать drain.При использовании сборки мусора запускается неисчерпывающая сборка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...