Как освободить объекты, связанные через objc_setAssociatedObject? - PullRequest
8 голосов
/ 14 февраля 2012

Если я использую категорию, которая использует objc_setAssociatedObject для добавления псевдосвойств к объекту, как я могу убедиться, что они были выпущены правильно? Должен ли я выпустить их вручную в dealloc?

Ответы [ 2 ]

17 голосов
/ 14 февраля 2012

Назначаемое вами поведение определяет способ управления памятью для данного типа.Если вы выберете сохранение или копирование, объект будет освобожден, когда экземпляр класса, к которому вы добавите связанную ссылку, будет освобожден.Это делает операции сохранения и копирования поведения предпочтительными для классов Objective-C.Назначение также полезно, чтобы избежать сохранения циклов, пока вы устанавливаете ссылку на ноль при выполнении с объектом.

Константы OBJC_ASSOCIATION_ASSIGN Указывает на слабую ссылку на связанный объект. OBJC_ASSOCIATION_RETAIN_NONATOMIC Указывает строгую ссылку на связанный объект, и что связь не выполняется атомарно. OBJC_ASSOCIATION_COPY_NONATOMIC Указывает, что связанный объект копируется, а связь не создается атомарно. OBJC_ASSOCIATION_RETAIN Определяет строгую ссылку на связанный объект, и эта ассоциация выполняется атомарно. OBJC_ASSOCIATION_COPY Указывает, что связанный объект копируется и что связь выполняется атомарно.

3 голосов
/ 13 июня 2014

Несмотря на то, что вы ответили на свой вопрос, тем не менее, поскольку вы не включили сам текст документов, а страница, на которую вы ссылались, больше не доступны, здесь для удобства других:

От AppleObjective-C Runtime Reference

void objc_removeAssociatedObjects(id object)

Удаляет все ассоциации для данного объекта.

Основная цель этой функции - облегчить ее возвратобъект в «нетронутом состоянии». Вы не должны использовать эту функцию для общего удаления ассоциаций из объектов, поскольку она также удаляет ассоциации, которые другие клиенты могли добавить к объекту. Как правило, вы должны использовать objc_setAssociatedObject снулевое значение, чтобы очистить ассоциацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...