Является ли проверка, если не ноль, перед отправкой сообщения о выпуске хорошей практикой? - PullRequest
9 голосов
/ 26 ноября 2008

при выпуске экземпляра, который может существовать или нет, я обычно пишу это:

if (object! = Nil) [освобождение объекта];

но так как отправка сообщения на ноль не является проблемой, это условно необходимо?

Полагаю, вопрос сводится к следующему: кто использует больше служебных данных, сравнивая объект с nil или отправляя nil сообщение?

Ответы [ 4 ]

15 голосов
/ 26 ноября 2008

См. на этой странице , которая объясняет, что передача сообщений на ноль (для обобщения вашего примера) вполне подходит.

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

5 голосов
/ 27 ноября 2008

Когда я кодировал больше C ++, чем Obj-C, я всегда писал код для проверки на nil - потому что для меня было примечанием, что этот указатель может быть nil. Теперь я позволю objc_msgSend разобраться с этим, поскольку мне стало удобнее читать код с предположением, что любой указатель действительно может быть nil.

На уровне «безопасного кодирования» я думаю, что более важно всегда устанавливать ваши указатели на nil после каждого выпуска (возможно, исключая release в методе dealloc). Таким образом, вы гарантируете, что ваш указатель никогда не будет недействительным (он либо действителен, либо nil).

2 голосов
/ 27 ноября 2008

Obj-C проверяет nil, поэтому нет необходимости делать это дважды.

[object release]; object = nil;

Если вы хотите добавить туда дополнительный код, гораздо лучше установить указатель на nil, чтобы он не зависел от двойного освобождения.

2 голосов
/ 26 ноября 2008

Эта проверка не нужна. Если вы не выполняете ОЧЕНЬ много итераций этого кода (10000, а может и больше), разница во времени незначительна.

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