Отмена NSOperation: NSInvocationOperation или подкласс NSOperation? - PullRequest
4 голосов
/ 17 марта 2011

У меня есть довольно простая, хотя и дорогая, задача, которую мне нужно запускать в фоновом режиме, что является стандартной ситуацией NSOperation. Я также должен убедиться, что операция поддерживает отмену и останавливается соответствующим образом. Учитывая это требование, какой подход лучше: просто завернуть дорогой вызов метода в NSInvocationOperation или написать подкласс NSOperation с нуля?

Вот мои мысли до сих пор. NSInvocationOperations - мой первый выбор, и я использовал его в прошлом, потому что задача настолько проста, что я не хочу писать целый класс со всем шаблонным кодом NSOperation просто для его выполнения. Что сейчас заставляет меня сомневаться, так это то, что для метода, выполняемого в NSInvocationOperation, на самом деле нет способа проверить отмену, которая не вызывает тревогу хакерской атаки в моей голове. См. этот вопрос , где приведены некоторые примеры упомянутой хакерской атаки. Я попробовал их, и они работают, они просто чувствуют себя непривлекательно.

Написание подкласса NSOperation, как упомянуто ранее, кажется излишним для выполнения простой задачи, но нет сомнений, что проверка на отмену более элегантна, чем все, что я встречал для NSInvocationOperation.

Итак, для тех, у кого больше операций NSO за поясом, что вы использовали для наиболее успешного завершения? Есть ли хорошее решение для отмены с использованием NSInvocationOperations, которое я, возможно, пропустил? Без какой-либо поддержки отмены количество ситуаций, в которых полезны NSInvocationOperations, просто сошло с обрыва.

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Подклассы NSOperation - единственный элегантный способ сделать это, я считаю.

Я склонен использовать NSInvocationOperations только тогда, когда я рефакторинг существующего кода, чтобы быть многопоточным, тогда это удобный ярлык.

1 голос
/ 17 марта 2011

просто подкласс NSOperation.(требуется больше символов)

...