Управление памятью Objective-C: если я освобождаю строку, хранящуюся в массиве, она только освобождает эту ссылку или освобождает объект в массиве? - PullRequest
0 голосов
/ 05 января 2011

Если у меня есть это:

NSString *lastPushed = (NSString *)[tagStack objectAtIndex:[tagStack count]-1];
.//do something with the last pushed element locally
.//do more cstuff here
.//after doing all the stuff needed in the function

[lastPushed release];

, где tagStack является NSMutableArray

Если я освобождаю lastPressed, так как он не был скопирован или инициирован, он только выпустит эту ссылку илиэто на самом деле освободить объект в mutableArray?

Ответы [ 3 ]

5 голосов
/ 05 января 2011

Вы не alloc, new или copy или mutableCopy lastPushed, так почему вы отпускаете его?

Так как lastPushed является указателем на объектв массиве вы выпускаете это.Это может привести к проблеме, когда ваш массив считает, что он имеет действительный указатель на объект, но вы его отпустили, и он был dealloc ed.

4 голосов
/ 05 января 2011

Это освободит объект в массиве, поскольку и lastPushed, и массив указывают на один и тот же объект .

Как всегда, вы должны следовать правилам управления.Не выпускайте ничего, что вы не создали, не сохранили или не скопировали.

2 голосов
/ 05 января 2011

Вы не должны выпускать lastPressed, поскольку вы не использовали alloc, copy или new. (Это так просто.)

Если вы хотите удалить его из изменяемого массива, вы должны использовать соответствующий метод в NSMutableArray (removeObject или removeObjectAtIndex и т. Д.). В противном случае неясно, что вы пытаетесь делать что будет кусать тебя на следующей неделе / ​​месяц / год и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...