2013-07-12 2 views
0

Если мне нужно повторно инициализировать NSArray с другими значениями, правильно ли это сделать?reinitialize NSArray

NSArray *array = [[NSArray alloc] initWithObjects:obj1, obj2, nil]; 
// ... 
// some code 
// ... 
array = [[NSArray alloc] initWithObjects:obj3, obj4, nil]; 

благодаря

+1

использование NSMutableArray для этого –

+0

Вы используете ARC? – JustSid

+0

@JustSid yep, я использую ARC – Lucabro

ответ

3

Да это абсолютно верно. Новый объект полностью отличается от предыдущего. Указатель объекта теперь указывает на новый объект, и старый будет выпущен, так как вы используете ARC.

Это не то же самое, что и повторная инициализация, потому что вы выбрасываете объект и получаете новый, но NSArray неизменен, поэтому это единственный способ «повторно инициализировать» его.

+2

В качестве бонуса OP мог бы присоединиться к современному миру и использовать '@ [obj3, obj4]' – borrrden

2

Ваш код не переустанавливает NSArray. Он просто назначает новый объект переменной array. Хорошо.

1

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

+0

да, конечно, я использую ARC – Lucabro

+0

, можете ли вы объяснить, в какой ситуации ru используя, как это ?? – Alex

1

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

NSObject * obj1 = [NSNull null]; NSObject * obj2 = [NSNull null];

NSMutableArray * arrayObj = [NSMutableArray arrayWithObjects: obj1, obj2, nil];

[arrayObj removeAllObjects];

arrayObj = [NSMutableArray arrayWithObjects: obj1, obj2, nil];

Я надеюсь, что это помогает :)

Смежные вопросы