Утечка памяти с NSMutableArray - PullRequest
       1

Утечка памяти с NSMutableArray

3 голосов
/ 09 сентября 2011

Я пытаюсь настроить многомерный NSMutableArray. Сначала я устанавливаю все позиции на [NSNumber numberWithInt:0], а затем заменяю объект другим [NSNumber numberWithInt:4] (например). Когда я закончу, я хотел бы восстановить массив. Я правильно сказал [array release]? Выпустит ли это все объекты NSNumber? Или мне нужно более продвинутое управление памятью, например сначала установить все объекты на nil?

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Ваш массив будет правильно сохранять и освобождать ваши NSNumber s при добавлении / замене и удалении объектов, а также при освобождении массива, содержащего элементы. Так что да, вы правы, так как вы используете удобный конструктор NSNumber, который будет возвращать автоматически освобожденный объект.

2 голосов
/ 09 сентября 2011

Вы можете освободить массив и воссоздать его или - чуть более эффективно - просто вызвать массив -removeAllObjects. Объекты NSNumber, которыми вы его заполняете, автоматически высвобождаются, поэтому массив, вступая во владение ими при добавлении их в него, также принимает на себя ответственность за их освобождение, когда он сам освобождается или его содержимое удаляется.

1 голос
/ 09 сентября 2011

Философски, вы не должны знать или беспокоиться о том, что NSArray делает в отношении сохранения и освобождения. Степень вашего контракта с ним заключается в том, что addObject: / etc поместит объект в массив, а objectAtIndex: / etc впоследствии возвратит те же объекты. Самое большее, вам нужно решить, нужно ли вам продолжать владеть объектом после помещения его в массив, полностью в соответствии с вашими требованиями. NSArray полностью отвечает за собственное управление памятью.

В случае NSArray, как он управляет хранением и выпуском внутри, хорошо известно, и на ваш буквальный вопрос уже ответили Ноа и Джо. Но вы никогда не должны полагаться на другой объект, имеющий конкретную реализацию.

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