Управление памятью, цель c - PullRequest
1 голос
/ 24 ноября 2011

Предположим, есть строка типа NSSTring

      NSString *string;

Существует массив с именем testArray, который является массивом строковых объектов

      string=[testArray objectAtIndex:1];

Нужно ли нам дать

      [string release]

или нет?

Ответы [ 5 ]

2 голосов
/ 24 ноября 2011

Нет, вам не нужно делать

[string release]

Вы должны release объект, только если вы выделите для него память. Проверьте это Политика управления памятью для получения более подробной информации о alloc и release.

2 голосов
/ 24 ноября 2011

нет .. в этом случае нет.

если вы получаете строку из функции, она обычно имеет флаг автоматического выпуска и будет освобождена позже.

Вам нужно отпустить его, если вы retain это, если вы alloc это или copy это.

Вы должны прочитать: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

2 голосов
/ 24 ноября 2011

В этом случае вам не нужно освобождать строку.Вы отпускаете только те Объекты, которыми вы владеете (созданные с помощью alloc / init, копируете или сохраняете).Пройдите документ управления памятью от Apple.В этом случае testArray принадлежит строка.Следовательно, он освобождает его, когда больше не требуется

1 голос
/ 24 ноября 2011

Только если вы также назвали [string retain]. В противном случае память управляется NSArray. Вы можете вызвать [string retain], если вам нужно удалить его из массива, но при этом сохранить ссылку на него.

1 голос
/ 24 ноября 2011

Не нужно выпускать. Вы должны освободить только объекты, которые вы выделили.

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