Objective C вопрос управления памятью с NSArray - PullRequest
0 голосов
/ 31 декабря 2010

Я загружаю массив с помощью чисел с плавающей запятой, как это:

NSArray *arr= [NSArray arrayWithObjects:
                [NSNumber numberWithFloat:1.9],
                [NSNumber numberWithFloat:1.7],
                [NSNumber numberWithFloat:1.6],
                [NSNumber numberWithFloat:1.9],nil];

Теперь я знаю, что это правильный способ сделать это, однако меня смущает количество розничных продаж.

  1. Каждый объект создается методом [NSNumber numberWithFloat:].Это дает объекту 1 счет.- в противном случае объект будет возвращен

  2. Метод arrayWithObjects: отправляет сообщение сохранения каждому объекту.

Это означает, что каждый объект имеетсохраняйте продолжение 2. Когда массив освобождается, каждый объект освобождается, оставляя их со счетом сохранения 1.

Что я пропустил?

Ответы [ 2 ]

6 голосов
/ 31 декабря 2010

NSNumber numberWithFloat: метод не возвращает сохраненный объект.

В общем, если вы не используете alloc, copy или new, вы можете предположить, что вы получаете объект с нулевым счетом сохранения.Таким образом, единственное сохранение, которое имеет место, это когда NSArray добавляет объекты к нему.

Есть хороший блог о таких вещах по адресу: http://interfacelab.com/objective-c-memory-management-for-lazy-people/

2 голосов
/ 31 декабря 2010

Нет необходимости освобождать эти объекты.
arrayWithObjects: и numberWithFloat: создают объект, который вам не принадлежит.

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