В Википедии говорится: "В компьютерном программировании слабый справочник - это ссылка, которая не защищает ссылочный объект от коллекции сборщиком мусора". Как выглядят эти два типа ссылок в коде? Имеет ли слабая ссылка ссылка, сделанная автореализованным сообщением?
Как выглядят слабые и сильные ссылки в objective-c?
Ответ 1
Следующий ответ для случая, когда сбор мусора (например, на iOS) отсутствует.
В случае сбора мусора на самом деле есть ключевое слово (__weak
), чтобы создать слабую ссылку.
"Слабая" ссылка - это ссылка, которую вы не сохраняете.
Вам нужно использовать эти слабые ссылки для разрыва циклов. Обычным случаем является дочерний объект, которому требуется ссылка на его родительский объект. В этом случае родитель сохранит ссылку на дочерний объект, а дочерний объект имеет ссылку на своего родителя, но не сохраняет его. Это работает, потому что дочерний объект должен существовать только до тех пор, пока выполняется родительский объект.
Значит ли слабая ссылка ссылка, сделанная с помощью автореализованного сообщения?
Не совсем, это будет "очень слабая ссылка"; -)
Авто-выпущенный материал исчезает, когда стек вызовов разматывается (например, в конце каждого цикла событий). Если вам нужно что-то менее временное, вам нужно сохранить ссылку (или, как в приведенном выше случае, убедитесь, что какая-то другая часть сохраняет ее достаточно).
Ответ 2
Слабая ссылка - это ссылка, которая недостаточно сильна, чтобы заставить объект оставаться в памяти, а сильная ссылка заставляет объект оставаться в памяти.
Если вы создали слабую ссылку на любую переменную, вы можете получить нуль для этого.
UITableViewDelegate
, UIScrollViewDelegate
и т.д. являются примерами слабых ссылок.
Пример сильной ссылки:
MyClass *obj1 = [[Myclass alloc] init];
Myclass *obj2 = obj1;
Здесь obj2
имеет сильную ссылку на obj1
означает, что если вы удаляете obj2
из памяти, тогда obj1
также удаляется.