Подтвердить что ты не робот

IVars ссылки сильные, слабые или что?

В Obj-C свойства могут быть настроены как слабые/сильные. Переменные экземпляра. вроде следующего -

@interface MyClass {
NSObject *a;
}

Объект MyClass сохраняет слабую ссылку на a или сильную, или что-то еще? Я думаю, что iVar не будет выпущен, пока его объект не будет выпущен. Почему мы не указываем слабые/сильные свойства iVar?

4b9b3361

Ответ 1

ссылка по умолчанию на ivar равна __strong, хотя вы можете явно установить ее как __weak или __strong


Ответ 2

Вы спросили меня, и я сделал глубокий поиск по объективу c - управление памятью. Я хотел бы поделиться с вами чем-то, что я получил от apple doc.

Поведение по умолчанию переменной экземпляра

Переменная экземпляра поддерживает сильную ссылку на объекты по умолчанию

Почему мы не указываем слабые/сильные свойства iVar?

Локальные переменные и переменные экземпляра non-property сохраняют сильные ссылки на объекты по умолчанию. Нет необходимости явно указывать сильный атрибут, потому что он по умолчанию.
Переменная поддерживает сильную ссылку на объект только до тех пор, пока эта переменная находится в области видимости, или пока она не будет переназначена другому объекту или нолю.

Если вы не хотите, чтобы переменная поддерживала сильную ссылку, вы можете объявить ее как __weak, например:

  NSObject * __weak weakVariable;

Ответ 3

@interface MyClass {
__weak NSObject *a;
__strong NSObject *a;
__unsafe_unretained NSObject *obj;
}