Подтвердить что ты не робот

Под автоматическим подсчетом ссылок, почему сохранить, освободить и dealloc не разрешено?

При попытке использовать -retain, -release и -dealloc при создании моего приложения с использованием автоматического подсчета ссылок в Xcode 4.2 появляется следующее сообщение:

Автоматический подсчет ссылок запрещает явное послание сообщения 'dealloc'

Почему я вижу эту ошибку? -retain, -release и -dealloc больше не разрешены при автоматическом подсчете ссылок?

4b9b3361

Ответ 1

В принципе:

При использовании ARC все это или ничего. Либо компилятор управляет всеми записями/релизами/деаллоками для вас, либо ничего не делает. Вы не можете переписывать свои собственные вызовы, потому что компилятор хочет сделать это сам. Это может сделать абсурдную оптимизацию, выполнив это (например, метод, который возвратил автореализованный объект в разделе "Управление памятью вручную", теперь может создавать объект, который никогда не попадает в пул авторезистов). Если вы начнете использовать свои собственные вызовы для сохранения и освобождения, то компилятор должен будет работать с ними и не сможет выполнять много оптимизаций, которые он хочет (и что вам нужно).

И в качестве дополнительного бонуса вызов -retainCount теперь является ошибкой компилятора! OH HAPPY DAY!

Ответ 2

в ответ на AliSoftware: мы CNA-смесь ARTC и не-ARC-фреймворки, а также источник с дугой и не-ARC.

(Я сделал это..)

Основные идеи: 1) компилятор будет вставлять/удалять вызовы как очень-очень хороший cocoa программист может делать 2) cocoa - это код ANYWAY C, поэтому у нас есть отдельные компиляции, поэтому компоновщик CAN связывает двоичные файлы, созданные несколькими источниками. Подумайте, как мы можем смешивать asm и cocoa, или C и pascal...

в главном мнении, что Appleadvantege над С#/java находится здесь: мы всегда позволяем смешивать и, используя технику COMPILER 8 в течение времени выполнения..), мы можем ускорить выполнение.

Ответ 3

При автоматическом подсчете ссылок сохранение, освобождение и деаллок запрещены.

Если у вас есть существующий код, вы можете использовать его как есть с -fno-objc-arc, вы можете выборочно отключить ARC в любом файле.

Если вы хотите отключить ARC для файлов MULTIPLE:

Выберите нужные файлы на этапах Target/Build/Compile Sources в Xcode НАЖМИТЕ ВВОД. (двойной щелчок выбирает только один файл) Тип -fno-objc-arc Нажмите "Enter" или "Готово"

Ответ 4

Как я уже говорил в , Xcode ARC, вы можете скомпилировать определенный источник файлов как не ARC. Дэйв ДеЛонг ответ немного. Это не включает тот факт, что вы можете поручить компилятору скомпилировать исходный код как не ARC в проекте ARC -enabled (как описано здесь).