Эй, ребята, я начинаю играть с Objective-C и хочу убедиться, что я правильно запоминаю свойства / свойства.
Предположим, следующий код:
@interface Rectangle : NSObject
{
Vector2* origin;
//[...]
}
Rectangle* myRect = [[Rectangle alloc] init];
myRect.origin.x = 100.0f;
[myRect print];
myRect.origin = [[Vector2 alloc] init]; //hummm.. 2 concerns here.
Концерн 1:
Предположим, происхождение является стандартным (присваиваемым) синтезированным свойством:
Считается ли предыдущий счетчик исходных значений myRect автоматически равным 0 при назначении нового Vector2, и GC позаботится об этом позже? Или я должен явно вызвать release внутри свойства?
Концерн 2:
Предположим, что origin будет свойством 'retain': (Кстати: будет ли этот код генерироваться автоматически при объявлении синтезированного свойства retain, возможно ли это?)
-(void) setOrigin: (Vector2*)newOrigin {
[newOrigin retain];
[origin release]
origin = newOrigin;
}
Тогда при выполнении:
myRect.origin = [[Vector2 alloc] init]
Не приведет ли это к двойному приращению счетчика ссылок, а затем к необходимости повторного вызова release, чтобы избежать утечки? Ребята, вы полагаетесь на хорошо документированный код (чтобы знать, что это свойство сохранения) при использовании библиотек / кода других людей, чтобы избежать таких проблем, или есть более безопасные способы выделения объектов / инициализации объектов?
Спасибо за советы!