Я работал над некоторыми утилитами XML в Objective-C, включая мои собственные объекты потока ввода-вывода, построенные вокруг значений FILE *
. Чтобы сделать это безопасно, важно, чтобы я вызывал fclose
в указатель файла, когда объект потока освобожден (если я еще этого не сделал).NSObject finalize устарел - что мне делать вместо этого?
Моя стратегия для этого (и многих других задач освобождения) уже давно должна была переопределить метод finalize
NSObject
. Однако я только что прочитал (и подтвердил путем тестирования), что finalize
больше не вызывается вообще во время освобождения.
Сбор мусора устарел в OS X v10.8; вместо этого вы должны использовать автоматический подсчет ссылок - см. Transitioning to ARC Release Notes.
Так что, по-видимому, сейчас я прошел через две версии OS X, не понимая, что я все время испытываю кровопотери системных ресурсов. Я прочитал эти заметки о выпуске, и я не мог найти ссылки на эту конкретную проблему. Мне не удалось найти альтернативный метод обработки освобождения.
Я пишу обертки Objective-C для типов данных C/C++. Мне нужно каким-то образом освободить неуправляемую память, когда оболочка освобождается.
Есть ли альтернатива ARC для finalize
? И если не то, что я должен делать с malloc'd типами C/C++ в моих NSObjects?