Недвижимость против Ивара во времена дуги


Я понимаю, что установка ivar теперь сохраняет объект, назначенный ему, так как установка переменных по умолчанию для strong квалификатор. Потому что ивары находятся в области объекта, в котором они объявлены и strong сохраняет объекты в пределах переменной, это означает, что значение ivars никогда не будет освобождено, пока объект, содержащий ivar, все еще жив.

это правильно?

Если да, то я прав, думая, что есть, в терминах управления памятью, нет разницы между сохранением (сильным) свойством и простым ivar больше?

2 56

2 ответа:

если переменная:

  1. объявляется в классе с помощью ARC.
  2. используется исключительно для реализации класса (не отображается как часть интерфейса класса).
  3. не требуется код.
  4. не требует каких-либо пользовательских геттер/сеттер.

тогда уместно объявить его как Ивар без соответствующего @property/@synthesize, и ссылаться на него непосредственно в пределах реализация. Он встроен в инкапсуляция чтобы объявить этот ivar в файле реализации класса.

// MyClass.h
@interface MyClass : ParentClass
@end

// MyClass.m
@implementation MyClass {
    NSString *myString;
}

- (void)myMethod {
    myString = @"I'm setting my ivar directly";
}
@end
  • этот Ивар будет рассматриваться как __strong компилятором ARC.
  • он будет инициализирован к nil если это объект, или 0 если это примитивно.

вы не можете использовать код и делают пользовательские геттеры и сеттеры с переменными экземпляра, кроме того, что они очень похожи при использовании ARC.