Я знаю, что это обсуждалось до тошноты, но я просто не понимаю управление памятью. Я понимаю, что сохранение поддерживает объект живым, а копия дает отдельную копию объекта.
Что я не получаю, так это когда речь идет о ivars & properties, сохранение в качестве свойства означает, что установщик освобождает старое значение и сохраняет новое:
property = newValue;
// retain
if (property != newValue)
{
[property release];
property = [newValue retain];
}
но я видел примеры, где они присваивают статические строки свойству сохранения, например,
self.stringProperty = @"something";
(some other code)
self.stringProperty = @"somethingElse";
Второй вызов set string должен вызывать release для статической строки, что недопустимо, почему не происходит сбой программы?
Кроме того, если объект объявлен со свойством retain, а затем ему присвоено что-то с помощью init, например,
@property(retain)someArray;
someArray = [[NSArray alloc] initWithArray:arbArray];
означает ли это, что someArray теперь имеет счет сохранения 2, но если он был создан с помощью
someArray = [NSArray arrayWithArray:arbArray];
счет сохранения только 1, потому что 2-ой - фабричный метод?