Я создаю экземпляры из Swift не-ARC Objective-C классов, перенесенных из Java (J2ObjC), это утечка?
Я использую J2ObjC для проекта. Я все настроил и включил свои классы Java.
Заметьте только, что я должен был отключить ARC, потому что в противном случае моя кодовая база Java не будет переноситься / компилироваться. (Сам J2ObjC рекомендуется с отключенной дугой)
Поскольку я не смог отключить только созданные файлы, я отключил его в Objective-C в Инспекторе проектов -> Цель -> Настройки сборки -> Apple LLVM 8.0 - Язык - Цель C -> Автоматический подсчет ссылок в Objective-C (Нет)
Затем я создал свой ViewController в Swift и создал без проблем классы, перенесенные из Java (заголовки сгенерированных файлов.h, включенные в заголовок моста), и я не должен делать никаких разборок / выпусков, которые я должен делать в Obj-C ВК без АРК.
Это нормально / безопасно? Под "утечкой" я подразумеваю, что, если я создаю экземпляр объекта с перемещаемым классом, после уменьшения количества ссылок он автоматически освобождается, как обычно в ARC (я знаю, что ARC нельзя отключить в Swift).
Я знаю, что мне все еще нужно следить за ссылочными циклами в классах Java, но это не то, что я имел в виду под утечкой.
1 ответ
Почему вам пришлось отключить ARC? Сгенерированный j2objc код должен работать как с ARC, так и без него ( подробности здесь). Мы рекомендуем не использовать ARC, поскольку он работает немного медленнее для сгенерированного кода, но с любой моделью памяти код должен правильно управлять своей памятью.
Что касается утечки, это может зависеть от кода Java, который может иметь циклы ссылок, которые не являются проблемой со сборкой мусора. J_ObjC cycle_finder может найти многие из этих циклов, а запущенный инструмент Xcode Instruments Leaks может найти любые другие.