Как происходит сбой фильтра свойств устройства Objective-C?

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

Ответ 1

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

Ответ 2

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

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

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

Итак, чтобы мы установили свойство "zero" для типа (nil, 0, 0.0, NO и т.д.).

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