Почему SwiftObjects не работают с блоком пула автоматического выпуска? - PullRequest
0 голосов
/ 07 марта 2019

Я знаю, что я могу использовать блок autorelease в swift с NSObject и другими подклассами, но почему я не могу использовать его с SwiftObject (см. Ссылки и остановите минус меня =))? В чем принципиальная разница между SwiftObject и NSObject? Как SwiftObject работает с ARC, если автозапуск не работает?

Ссылки:

  1. stackoverflow.com / а / 25880106/3527461

  2. https://devstreaming -cdn.apple.com / видео / WWDC / 2014 / 418xxtihju1a7v4 / 418 / 418_improving_your_app_with_instruments.pdf

1 Ответ

1 голос
/ 07 марта 2019

Под «SwiftObject» я предполагаю, что вы имеете в виду «объект Swift, который не связан с Objective-C».

Для этих объектов нет необходимости в пуле авто-релиза. Концепция автоматического выпуска была создана для упрощения определенных ситуаций ручного сохранения счета, что наиболее важно, когда вы возвращаете значение, но вы не хотите заставлять вызывающего абонента вызывать -release, потому что это будет хлопотно. Таким образом, вы запланируете -release, который будет называться "в будущем", "автоматическим выпуском".

Но с ARC это на самом деле не нужно. Компилятор с радостью выполнит утомительную работу по добавлению дополнительных вызовов release во все места, в которых они будут нужны, а оптимизатор с удовольствием вывезет их обратно из всех мест, в которых они на самом деле не нужны. Поскольку вы не можете создать код с подсчетом вручную в Swift, нет особой необходимости в специальной языковой поддержке для такой удобной системы, как autorelease.

Это не означает, что не-ObjC Swift объекты не попадут в пул авто-релиза; они все еще могут (хотя обычно из-за некоторого неявного соединения). Но программисту не нужно беспокоиться об этом.

...