У меня есть приложение с поддержкой ARC, которое использует статическую библиотеку MRC (non-ARC). В статической библиотеке retain
/release
переопределены для обеспечения некоторого пользовательского слабого режима ref/cache ([super retain/release]
называется, конечно). Проблема в том, что поскольку retain
/release
не разрешены в коде с поддержкой ARC, нормально ли использовать классы, которые переопределяют retain
/release
в коде с поддержкой ARC? На данный момент это работает хорошо, но я не уверен, что это зависит от неопределенного поведения, которое может сломаться в будущем.переопределить сохранение/освобождение в ARC
Также в чем причина запрета переопределения retain
/release
? Это потому, что компилятор выполнил некоторую специальную оптимизацию, которая обходит процесс связывания сообщений, чтобы ускорить вызов метода? Я знаю, что вызовы _objc_storeStrong
генерируются компилятором, который выполняет подсчет ссылок, значит ли это, что переопределенные retain
/release
не могут быть вызваны в ARC?
ARC просто поддерживает управление памятью самостоятельно, то есть на простом языке он автоматически добавляет код сохранения/освобождения в соответствии с областью действия объекта. Так что, если вы не беспокоитесь о библиотеке, которая не поддерживает ARC, она не создаст никаких проблем в будущем. –