Тотальный перебор.Если вы внимательно прочитали соответствующую документацию, это не говорит о том, что вам следует избегать автоматического освобождения объектов.Это говорит о том, что вам следует избегать использования пулов автоматического выпуска, когда вы находитесь в тесных, богатых объектами циклах.В этих случаях вы должны явно управлять своей памятью (с помощью retain
и release
), чтобы гарантировать, что объекты создаются и уничтожаются амортизированным способом.
Аргумент, что iPhone ограничен в памятисреда истинна, но полная красная сельдь.Objective-C с платформами Foundation и Cocoa (хотя в то время их так не называли) выполнял просто отлично на NeXTcube, который имел 16 МБ ОЗУ (с возможностью расширения до 64).Даже iPhone 3, который на данный момент в значительной степени является EOL, имеет 128 МБ.
edit
Поскольку приложение iPhone представляет собой приложение на основе runloop, новый автоматический выпускбассейн будет создаваться и уничтожаться каждый раз, когда он вращается.Это четко определено в документации.Таким образом, единственные причины, по которым вам нужно было бы создать собственный пул автоматического выпуска:
- порождение фонового потока, где вы должны создать свой собственный пул (поскольку новые потоки,по умолчанию отсутствует базовый ARPool)
- Выполнение некоторой операции, которая приведет к созданию значительного числа автоматически выпущенных объектов.В этом случае создание и удаление пула помогло бы обеспечить ограниченный срок службы временных объектов.
Однако во втором случае рекомендуется явно управлять памятью в максимально возможной степени.,Это сделано для того, чтобы ваша операция не остановилась, когда она пытается опустошить пул с несколькими тысячами объектов.Если вы управляете своей памятью вручную, вы можете постепенно освобождать эти объекты, так как они больше не нужны, вместо того, чтобы сохранять их для одного единовременного выпуска.Вы можете помочь амортизировать выпуск сразу, вложив ARPools, что поможет.
Тем не менее, в конце дня просто делайте то, что кажется естественным, а затем (и только * 1028)* затем) оптимизируйте его, если у вас есть конкретные доказательства того, что вам нужно это сделать.
edit # 2
ОК, оказывается, что есть a рекомендация избегать использования autorelease
. НО эта рекомендация содержится в разделе «Распределение памяти разумно» раздела «Настройка производительности и отзывчивости» Руководства по программированию приложений для iOS.Другими словами, избегайте этого , если вы измеряете проблему производительности .А если серьезно: авто-релиз существует уже около 20 лет и прекрасно работает на компьютерах гораздо медленнее и более ограниченно, чем современные iDevices.