1

Насколько я знаю, когда я разыгрываю мертвую слабую ссылку в Objective-C, в результате получается значение nil. Мне интересно, есть ли способ сказать, существует ли значение - слабое значение, присвоенное переменной, когда оно уходит, вместо того, чтобы просто иметь значение nil (например, если ссылка никогда не назначалась).Дифференцировать мертвую слабую ссылку по сравнению с нулевым значением

Возможно, есть функция выполнения на нижнем уровне, которую я могу использовать?

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

+0

Насколько я знаю, нет. Обратите внимание, что вы действительно не разыгрываете слабую ссылку. Когда объект освобождается, сама эта ссылка равна nil'd; это не вопрос бухгалтерского учета «эта ссылка все еще действительна или нет?» –

ответ

2

Нет, невозможно определить, установлено ли значение слабого задания nil, поскольку его референт был освобожден.

Слабый справочник установлен на nil по weak_clear_no_lock в objc-weak.mm.

4

Как сказал Роб, вы не можете сделать это напрямую. Но вы можете сделать это косвенно.

Используя связанные объекты, вы можете связать подкласс NSObject с объектом, который слабо ссылается. В этом подклассе переопределите dealloc, чтобы уведомить что-то, что освобожденный объект с низкой ссылкой.

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

Да, это хрупкий. Еще одна сильная ссылка на экземпляры этого подкласса и все это перестает работать.

Смежные вопросы