2012-05-25 3 views
4

Мне не нравится ARC.Как обнулить слабые ссылки при не-ARC?

Но самая важная особенность ARC, обнуление слабых ссылок, отсутствует при не-ARC. В настоящее время я использую MAZeroingWeakRef, он работает, но взломан, иногда делает коды лишними. Любые другие способы обнуления слабых ссылок?

+2

Что не так, просто вытащив их из Dealloc? В любом случае это все обнуление. – CodaFi

+4

«Мне не нравится ARC.», Мы должны быть друзьями! – Jake

+4

Ваш анализ здесь странный. Обнуление слабых ссылок - это, пожалуй, * наименее важная особенность ARC (хорошо, как есть). Важнейшими особенностями ARC являются улучшение производительности во времени и пространстве в сочетании с гораздо более безопасным кодом (меньшее количество сбоев), что также бывает намного проще писать практически в каждом случае. Какая другая функция компилятора дает все это? ARC так же ценна на iOS 4 без «слабого», как на iOS 5. http://stackoverflow.com/questions/8760431/to-arc-or-not-to-arc-what-are-the-pros -and-cons/8760820 # 8760820 –

ответ

0

Я думаю, что вы должны придерживаться парадигмы, которую Apple сама рекомендовала до того, как была введена ARC, то есть nil-ing все ваши «слабые» ссылки из метода -dealloc. Это не только стандарт де-факто, но и способ, которым рефактор кода Xcode ведет себя, когда ARC не включен, поэтому его соответствие должно сэкономить пару головных болей.

1

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

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

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