Нужно ли мне самому выпускать номера NSNumbers, добавленные в NSDictionary? - PullRequest
2 голосов
/ 13 августа 2011

Я создаю NSDictionary, который отображает объекты в целые числа, и поскольку NSDictionaries ничего не обрабатывает, кроме объектов, я должен обернуть каждое целое число в объект NSNumber с помощью [NSNumber numberWithInt: 30] или чего-то еще.Что мне неясно, так это то, нужно ли мне освобождать все те объекты NSNumber, которые я создаю.На самом деле я не выделяю для них место, поэтому они должны быть в пуле автоматического выпуска, но могу ли я быть уверен, что объект NSDictionary сохраняет и освобождает их правильно?Допустим, я устанавливаю

NSDictionary * myDict = [[NSDictionary alloc] initWithObjectsAndKeys: objectOne, [NSNumber numberWithInt: 30], nil];

, и я правильно освобождаю NSDictionary, когда я закончу с ним (так как я выделяю место для этого в моем собственномкод).

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

Нет, объекты NSNumber автоматически освобождены.

Добавление их в NSDictionary вызовет отправку сообщения сохранения каждому объекту NSNumber, который вы добавляете.

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

Но у вас есть NSDictionary, созданный с помощью alloc & initWithObjectsAndKeys :. Поэтому вам необходимо позаботиться об управлении памятью объекта myDict.

1 голос
/ 13 августа 2011

Нет. У тебя все хорошо.

Вы добавляете автоматически выпущенный NSNumber в словарь. Словарь сохранит NSNumber, поэтому, когда он в конечном итоге будет автоматически выпущен, он все равно будет действителен.

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

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