iphone - изменить ссылку указателя на новый объект и очистить старый - PullRequest
1 голос
/ 29 октября 2010
NSMutableArray *myArray = [[NSMutableArray alloc] init];
MyClass *obj1 = [[MyClass alloc] init];
[myArray addObject: obj1];

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

obj1 = nil 

OR

[obj1 release];

// В чем различия?

obj1 = [[MyClass alloc] init];
[myArray addObject: obj1];

........... Продолжить использование obj1 и добавить в массив.

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

Назначение nil для переменной не имеет никакого эффекта. Вам нужно вызвать release, чтобы убедиться, что старый объект правильно очищен.

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

1 голос
/ 29 октября 2010

Когда вы добавляете объект в массив, массив сохраняет адрес переменной, поэтому вы можете свободно использовать вашу временную переменную (obj1) для создания другого объекта - значение в массиве не будет уничтожено.

Но так как массив сохраняет свои элементы для правильного управления памятью, вам нужно освободить obj1 после помещения его в массив.Так что вам нужно [obj1 release]; линия

...