Одним из способов улучшить код, показанный выше, было бы использование соглашения 'set to nil'.
EG:
NSString * test = [[NSString alloc] initWithCString: "foo"];
NSLog (@ "test retain count =% d", [test retainCount]); // печатает 1
[тестовый релиз];
тест = ноль; // установлен в ноль, так как я освободил указатель, я больше не должен его использовать.
NSLog (@ "test retain count =% d, test foobarpro =% d", [test retainCount], [test foobarPro]); // теперь будет печатать 0 и 0 - потому что любой вызов target-c для объекта nil возвращает 0 (и не завершится)
Установив указатель на ноль после того, как вы его отпустите, вы немного подтвердиете свой код на будущее: кто-то, кто придет позже и отредактирует код на 10 строк ниже, может случайно использовать «тест», вероятно, без вредных последствий (или очевидного сбоя). Я даже установил нулевые указатели в вызовах dealloc, так как некоторые из самых сложных задач отладки случаются, когда в уничтожении используются ненулевые «плохие» указатели.
Также вы можете отлаживать с помощью зомби, чтобы искать случаи, когда вы используете указатели, такие как недействительный тест.
- Том