выпуск NSInvocationOperation вызывает сбой приложения - PullRequest
2 голосов
/ 20 января 2011

Привет, у меня есть следующий код

NSString *analyticsStr = [[NSString alloc] initWithString:[self constructXMLMessage:TagObj]];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(sendAnalyticsString:)
                                                                          object:analyticsStr];
[operationQueue addOperation:operation];
[analyticsStr release];
//[operation release];

, когда я раскомментирую [выпуск операции], мое приложение вылетает.И я получаю эту ошибку:

malloc: * ошибка для объекта 0x726ed50: освобожденный указатель не выделен * установить точку останова в malloc_error_break для отладки

Я считал, что NSOperationQueue заботится о сохранении объектов.Есть ли что-то, что я делаю неправильно или не осознаю.

1 Ответ

3 голосов
/ 20 января 2011

Используйте шаблон Zombies Instruments для отладки.Флаг появится на временной шкале, когда вы отправите объекту сообщение после того, как он должен был быть освобожден;Вы можете нажать кнопку в этом флаге, чтобы начать расследование того, что излишне выпустило объект.

Кстати, вам не нужно создавать этот строковый объект.Строка, возвращаемая constructXMLMessage:, будет действовать столько же, сколько и текущий пул автоматического выпуска, что должно быть все время, необходимое для работы с ним.Он не умрет внезапно от тебя.

...