Нет, это не так, как работает управление памятью Какао.Когда вы добавляете объект в массив, массив выражает, что ему принадлежит объект, отправляя сообщение -retain
.Массив сохраняет это владение до тех пор, пока сам не исчезнет (т.е. будет освобожден), затем ему больше не нужен объект и он отправит ему -release
, чтобы отказаться от владения.Массиву не нужно сохранять или освобождать объекты каждый раз, когда он сохраняется или освобождается.
Подводя итог: объекты сохраняют другие объекты, когда им нужно взять их в свои владения, и освобождают их, когда они больше не нуждаются в этом.владение.
Это указывает на неправильное управление памятью string
ivar.Вы правильно владеете строкой нулевой длины в -init
(где я использую «правильно» в очень свободном смысле), но затем каждый раз, когда ваш объект освобождается, он освобождает строку.Подумайте:
TestClass *obj = [[TestClass alloc] init];
[obj retain];
[obj release];
[obj release];
вышеизложенное может привести к сбою (а если нет, то вам очень не повезло).Вы должны освободить строку в -dealloc
, когда вашему объекту, наконец, она больше не нужна.Если вы меняете объект, на который ссылается ivar, вам также необходимо сменить владельца.