Как повредиться на __ NSAutoreleaseNoPool

Я становлюсь наперченным

*** __ NSAutoreleaseNoPool (): Возразите 0x1961180 класса NSEvent, автовыпущенный без пула на месте - просто утечка

предупреждения во время времени выполнения и понятия не имеют, какова причина. Поверхностный Гуглит, указывают, что это - символ, на котором я могу повредиться с XCode, но добавление его как символьная точка останова через Выполненный> Справляется, Точки останова> Добавляют Символьную Точку останова, или просто через окно управления точками останова, результаты в точке останова с - рядом с ним вместо проверки, которую я беру, чтобы означать, что это - символ, который не может быть найден.

Я попытался добавить символ "__ NSAutoreleaseNoPool" с двумя символами нижнего подчеркивания, одним подчеркиванием, и теперь я просто чувствую себя глупым. Ошибки продолжают регистрироваться, и никакие точки останова не поражены. Любые указатели для повреждения на символах Obj-C или отладки этого ценились бы.

[РЕДАКТИРОВАНИЕ: после, возможно, 10 (еще 10, таким образом, пара дюжины общего количества, включая по крайней мере два перезапуска XCode) работает, я получил "Незаконченную точку останова 9 - "__, NSAutoreleaseNoPool", разрешенный" распечатанный к моей консоли и точке останова, начал работать. Там какой-либо путь состоит в том, чтобы вынудить незаконченную точку останова на самом деле решить?]

10
задан Tyrus 15 May 2010 в 21:50
поделиться

2 ответа

Похоже, вы где-то используете Какао в потоке, а не обертываете тело потока пулом автозапуска. Вам, вероятно, не нужно использовать точки останова, чтобы найти это. Выполняете ли вы какой-либо detachNewThreadSelector?

2
ответ дан 3 December 2019 в 14:33
поделиться

Проблема здесь проста: вы выпускаете без пула. Обычно это происходит в инструментах командной строки, написанных для Foundation. Просто добавьте следующий код в ваш main () : (Несущественные части опущены)

int main (…) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  /// Your code goes here.

  [pool drain]; // This one might not strictly speaking be neccessary.
  [pool release];

   return 0;
}

Изменить: Если вы не создаете инструмент командной строки, скорее всего, вы делаете что-то непослушное; но тем не менее: если у вас есть код, который вы вызываете до NSApplicationMain () , вам необходимо заключить его в тот же базовый код, опустошив и освободив пул перед вызовом NSApplicationMain .

1
ответ дан 3 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: