2012-04-19 3 views
0

В чем разница между анализами в следующих сегментах кода. , который сегментирует сегменты быстрее в парсинге?Что общего между NSArray Parsing?

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = (NSMutableArray *)arr; 

(а)

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 

NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 
+1

Вы на самом деле не "разбор" ничего здесь. Ваш второй пример ближе к правильности, но вы пропустите пустой изменяемый массив. – Caleb

+0

... все полученные ответы верны и точны. Я все равно хотел бы добавить что-то. Возможно, это всего лишь ваша формулировка, но меня очень раздражает ваш вопрос о скорости («быстрее в разборе»). Если вам действительно нужно оптимизировать, используйте инструменты для измерения и делайте только оптимизацию вещей, которые оказываются узким местом. Измерение намного лучше, чем предполагалось. – Till

ответ

3

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

NSMutableArray *data = [[NSMutableArray alloc] init]; 
data = [NSMutableArray arrayWithArray:arr]; 

должен быть

NSMutableArray *data = [NSMutableArray arrayWithArray:arr]; 

Теперь сам вопрос:

  1. Первый случай является плохой идеей, вы бросили NSArray, но вы Канот изменить его, так как вы действительно не изменили его тип, назначили его только указателю NSMutaleArray.

  2. Второй случай создаст новый NSMutableArray, который изменен, с содержимым NSArray, и это круто, вы можете изменить этот массив сейчас.

+0

+1 что и в этом первом фрагменте он присваивает не изменяемый NSArray изменчивый NSMutableArray, который инициирует исключение, если позже попытается его мутировать. – Till

+0

спасибо. Я исправлю это. Пожалуйста, ответьте на мой вопрос. –

+0

@ Поверьте, вы правы, сначала я был слишком вдавлен в комментарий и ответил на вопрос, прежде чем завершить его. изм. – MByD

1

Похоже, что вы хотите, или:

NSArray *arr = [[NSArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 
NSMutableArray *data = [arr mutableCopy]; 

или:

NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"Apple",@"Macbook", nil]; 
Смежные вопросы