Создание объектов с использованием функции init возвращает по умолчанию сохраненный экземпляр. (См. Руководство по программированию для управления памятью)
Если свойство определено с атрибутом 'retain', то вашобъект сохраняется еще раз.
Итак, правильный способ сделать это -
MyClass *myCreatedVariable = [[MyClass alloc] init];
self.myProperty = myCreatedVariable;
[myCreatedVariable release];
Кстати, это полезно знать и при использовании массивов.Как только объект, созданный с помощью функций alloc и init, добавляется в массив, он сохраняется в массиве, поэтому вы можете освободить свой экземпляр после добавления его в массив.
В обоих случаях retainCount будет тогда1, как и ожидалось.
если ваше свойство определено с помощью атрибута 'copy', вы также можете освободить объект и даже убить его, так как он был полностью скопирован и сохранен один раз.(Я думаю, что что-то есть, если вы используете сборщик мусора вместо управляемой памяти ... Для проверки ..)
Наконец, если ваше свойство установлено с атрибутом assign, копируется только адрес объекта,поэтому в этом случае не следует освобождать исходный объект.
Однако не рекомендуется использовать атрибут 'assign', поскольку вы можете устанавливать свойство для объектов, которые вы не создали самостоятельно и которые можно было бы освободить.в любое время, позволяя вашему свойству указывать на поля ...
Наконец, не забывайте, что статические создатели в Какао не возвращают сохраненные объекты .(Это соглашение, исключения могут существовать ...)
пример:
NSArray* myArray = [NSArray array];
self.myProperty = myArray;
В этом случае не выпускайте myArray, это уже сделано в функции создателя.Присвоение его свойству сохранит его (с атрибутом retain или copy).
Надеюсь, это поможет,
Приветствия