Как сбои свойства Objective-C сигнализируют о сбое? - PullRequest
10 голосов
/ 31 марта 2011

Предположим, у вас есть свойство с семантикой копирования. Что делать в установщике, если метод копирования не работает? (Я предполагаю, что это возможно, поскольку копирование обычно начинается с комбинации alloc / init, которая может завершиться с ошибкой и вернуть nil.) Apple рекомендует возвращать коды ошибок, а не использовать исключения, но установщик обычно имеет тип возврата void. Какой рекомендуемый подход? Как вы сигнализируете, что произошла ошибка?

Ответы [ 2 ]

5 голосов
/ 01 апреля 2011

Apple рекомендует, чтобы исключения были зарезервированы для исключительных ситуаций.В любом случае это иногда рекомендуется в качестве программирования, но в случае Objective-C это усиливается из-за более высокой стоимости обработки исключений.

Таким образом, вы можете выбросить исключение, если хотите, и это уместно, например, запуститьнехватка памяти (ошибка копирования) является (надеюсь!) исключительной.

Тем не менее, некоторые методы программирования также рекомендуют, чтобы свойства не генерировали исключения;обычно из-за того, что что-то, похожее на присваивание obj.property = value;, могло бы сбить с толку, если были бы сгенерированы исключения (в отличие от [obj setProperty:value]).

Так, чтобы мы установили свойство в «ноль» для типаnil, 0, 0.0, NO и т. Д.).

Чтобы получить более подробную информацию о записи об ошибке, подробные сведения об ошибке, которые могут быть запрошены после обнаружения «нуля».По сути, это подход, используемый базовыми («Unix») системными вызовами и многими библиотечными функциями, в которых errno устанавливается перед возвратом «нуля».

5 голосов
/ 31 марта 2011

Нет никакого способа сообщить об ошибке, кроме того, что свойство, установщик которого вы вызвали, будет nil.Вы можете проверить nil после выполнения установки, точно так же, как вы подтвердите успех после выделения / инициализации нового экземпляра.

...