Сохраняют ли вызовы методов аргументы при вызове? - PullRequest
2 голосов
/ 12 мая 2011

Если я вызываю метод в Objective-C с аргументом и освобождаю аргумент afterwords.

id argumentI = [Object new]; 
[ classA method1: argumentI ];
[ argumentI release ];

Тогда я знаю, что аргумент освобождается ПОСЛЕ того, как method1 закончен, поскольку строки обрабатываются линейно.НО, когда я вызываю метод в фоновом потоке:

[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];

И тогда основной поток освобождает объект, В то время как фоновое задание использует аргумент для чего-то (С принятием, что retainCount будет 1 до того, какметод называется).Могу ли я получить сообщение об ошибке из-за использования зомби (использование объекта, который уже освобожден)?

Вопрос:

Сохраняют ли вызовы методов объект, которыйэто аргумент?Или мне нужно вызвать retain в начале метода, если это похоже на проблему выше?

1 Ответ

2 голосов
/ 12 мая 2011

из документации из detachNewThreadSelector:toTarget:withObject:

Объекты aTarget и anArgument сохраняются во время выполнения отдельного потока, а затем освобождаются.

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