Как мне правильно управлять памятью этого UIBarButtonItem под ARC? - PullRequest
0 голосов
/ 28 декабря 2011

Я привык к программированию в предыдущих версиях iOS и новых для iOS 5 и ARC.

У меня есть следующий фрагмент кода:

UIBarButtonItem *backbutton = [[UIBarButtonItem alloc] initWithTitle:@"Bill"
                           style:UIBarButtonItemStyleBordered
                           target:nil
                           action:nil];
self.navigationItem.backBarButtonItem = backbutton;

В предыдущих версиях iOSЯ должен был бы явно отпустить кнопку возврата.В iOS 5 мне интересно, как это сделать.Этот фрагмент кода находится в методе viewDidLoad контроллера представления.

Ответы [ 3 ]

4 голосов
/ 28 декабря 2011

Поскольку вы используете ARC, вам не нужно ничего делать, чтобы отпустить кнопку.Он будет выпущен автоматически.ARC был сделан, чтобы не было необходимости выпускать все.Это будет обрабатываться компилятором Xcode.

2 голосов
/ 28 декабря 2011

Под капотом iOS 5 по-прежнему выполняет управление памятью, используя счетчики сохранения и освобождение объектов, когда на них больше нет ссылок. До ARC управление памятью в iOS полагалось исключительно на программиста, чтобы охватить все возможности времени выполнения (несчастный). В других средах, таких как .NET и OS X, периодически устанавливается нулевое число объектов, на которые нет ссылок. Эта система «сборки мусора» во время выполнения непредсказуемо замедляет выполнение. ARC уникален тем, что, насколько мне известно, это первое решение для управления памятью, которое полностью выполняется путем статического анализа всех возможных путей выполнения с использованием компилятора (замечательно).

По сути, компилятор прозрачно вставляет операторы release, retain или autorelease по своему усмотрению. Теоретически, объект, созданный фабричным методом, таким как [NSString stringWithString], будет иметь ту же жизнь, что и объект, созданный [[NSString alloc] initWithString]. Кто-нибудь знает, если компилятор LLVM трактует alloc 'ed объект по-другому?

1 голос
/ 28 декабря 2011

Отредактировано, потому что я не правильно сказал, что вы можете освободить / сохранить в ARC. Ты не можешь. Это хорошее объяснение: Некоторые вопросы об автоматическом подсчете ссылок в iOS5 SDK

...