Обычно ссылки weak
используются, чтобы избежать удержания циклов в графе объектов приложения. Я понимаю эту часть. Теперь я хотел бы сделать еще один шаг и понять, как они работают под капотом.Что происходит с __weak квалифицированными переменными под капотом?
Поиск немного, я читал, что, когда я использую квалификатор __weak
, переменная, связанная с этим квалификатором, регистрируется в пуле автоопределений, но что это значит? Почему объект зарегистрирован в пуле? Какой тип пула используется? Это основной пул или какой-то другой специально созданный?
Когда я использую этот код:
id _weak myWeakObj = [[NSObject alloc] init];
компилятор дает мне предупреждение, что я могу исправить с:
id _strong myStrongObj = [[NSObject alloc] init];
id _weak myWeakObj = myStrongObj;
Таким образом, на основе предыдущего вопроса, что происходит с объектом ссылочного от myStrongObj
? Если возможно, я хотел бы узнать, как выглядит код компилятора?
Фактический промежуточный этап (пост-ARC) на самом деле недоступен в качестве источника. Вам нужно будет посмотреть на ассемблер, чтобы увидеть сохраненные и выпущенные версии. Это довольно приятный вопрос! –
Где вы узнали об авторешетке и __weak? Это не так. В основном это выполняется в режиме выполнения Objective-C. Я постараюсь кратко сформулировать короткий ответ ... – mattjgalloway
@JacquesCousteau Спасибо, что выбрали и исправили заголовок. Как можно увидеть сохранение и выпуск в ассемблере? Благодарю. –