Экземпляры объекта сохраняются и освобождаются.Указатели на экземпляры объектов не являются объектами, и они сами не сохраняются и не освобождаются.
Сначала у вас есть указатель bClass, указывающий на экземпляр BCLass.Этот экземпляр сохраняется при вызове init.(Сохранить счетчик = +1)
Затем вы назначаете другой указатель через установщик свойств setMyProperty.Поскольку свойство объединено с атрибутом retsain, экземпляр BClass снова сохраняется.(Сохранить счет = +2)
Затем вы вызываете release для экземпляра BClass, на который указывает bClass.(Это тот же экземпляр BClass, на который указывает свойство myProperty. (Сохранить количество = +1 сейчас.)
Эффект не использования неатомического атрибута можно увидеть из документации:
Свойства являются атомарными по умолчанию, так что синтезированные средства доступа обеспечивают надежный доступ к свойствам в многопоточной среде, то есть значение, возвращаемое из метода получения или устанавливаемое через установщик, всегда полностью извлекается или устанавливается независимо от того, какие другие потокивыполняются одновременно.
Если вы указываете strong, копируете или сохраняете и не указываете неатомарное, то в среде с подсчетом ссылок синтезированный метод доступа get для свойства объекта использует блокировку и сохраняет и автоматически выпускает возвращенныйзначение - реализация будет похожа на следующее:
[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
Таким образом, похоже, что вы записываете в журнал оператор, ссылающийся на свойство, которое сохраняет объект (Retain = +2) и помещает его в авторелиз.бассейн. (Релиз случится латer.
Собственность - это просто взять на себя ответственность за то, чтобы сообщить объекту, что он больше не нужен этому владельцу, когда придет время его отпускать.Принятие права собственности осуществляется путем сохранения экземпляра объекта (с New, Init, Retain или Copy).