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