Значение переменной экземпляра ARC сохраняется

Если у нас есть файл .h:

@interface TestViewController : UIViewController { __weak NSObject *object; } @end 

и методы в .m-файле:

 - (void)viewDidLoad { [super viewDidLoad]; NSObject *localObject = [[NSObject alloc] init]; NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)localObject)); object = localObject; NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)object)); NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)localObject)); } 

Затем мы получаем следующий результат для сохранения count:

1
2
1

Мой вопрос заключается в том, почему счетчик удержания увеличивается до 2 на «объекте», когда он объявляется как переменная экземпляра «__weak», более того, значение «localObject» остается равным 1. Я думаю, это из-за того, что вставки ARC сохраняются / отпускаются, но я не уверен.

One Solution collect form web for “Значение переменной экземпляра ARC сохраняется”

Прежде всего, обычный отказ от ответственности: абсолютное значение счета удержания не говорит вам ничего полезного, для получения дополнительной информации см.

Теперь в вашем случае, в строке

 NSLog(@"%ld", CFGetRetainCount((__bridge CFTypeRef)object)); 

вы читаете значение слабого указателя и документацию Clang / ARC 4.2. В семантике говорится об этом:

Для объектов __weak текущий указатель сохраняется и затем высвобождается в конце текущего полного выражения.

Поэтому счет сохранения объекта увеличивается на единицу при передаче в CFGetRetainCount() . Вы можете видеть это также в сгенерированном ассемблере:

 movq %rbx, %rdi callq _objc_retain movq %rax, %rbx .loc 1 21 0 movq %rbx, %rdi callq _CFGetRetainCount movq %r15, %rdi movq %rax, %rsi xorb %al, %al callq _NSLog movq _objc_release@GOTPCREL(%rip), %r12 movq %rbx, %rdi callq *%r12 
  • Ошибка iOS на устройстве с включенным ARC
  • Выдает ли система мои объекты, когда приложение завершается?
  • Чистая память приложений в быстрой
  • Отключение UIView после удаления приложения removeFromSuperview
  • iOS - ViewController не освобождается при входе в ARC
  • Постоянное увеличение постоянной памяти - Удаление подъявок из представления - iOS (ARC)
  • Блоки в нетривиальных циклах
  • Растровые данные Core Graphics не освобождаются из памяти
  • Освобождение распределений в ответ на предупреждение о низкой памяти, но приложение все еще падает
  • Тестирование управления памятью в Objective-C (iOS)
  • Возвращаемый объект возвращается правильно?
  • Interesting Posts

    Xcode был разбит после добавления ART.xcodeproj в библиотеку

    Где я могу найти список доступного имени свойства для первого параметра tesseract-> setvariable?

    Пользовательский интерфейс экрана настроек ios

    ld: фреймворк не найден Parse Xcode 7 beta

    Как повторно использовать цвета и стили в iOS / xcode?

    Есть ли альтернатива использованию NSTimer для отображения оставшегося времени аудиофайла с помощью AVAudioPlayer?

    воспроизводить видео с URL-адреса, полученного из ALAsset в iOS

    Повреждения игровой площадки для рекурсивного типа значения

    Как сфокусировать изображение обрезки в React Native

    Сбой приложения после обновления Xcode до 4.5. Присвоение сохраненного объекта переменной unsafe_unretained

    Каков наименее ресурсоемкий способ узнать, является ли объект папкой?

    Создание серого UIImageView

    Facebook iOS presentRequestsDialogModallyWithSession для возвращения выбранных друзей

    Воспроизведение видеофайла, сохраненного в каталоге документов приложения

    Выполнение полностью настраиваемых анимаций с помощью Core Animation – производительность

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.