Это мой первый вопрос о переполнении стека, и я надеюсь, что это довольно просто. У меня есть следующий код, который я написал, чтобы выяснить, что именно я добавляю в 'externalArray' в этом случае:
NSMutableArray *contents = [[NSMutableArray alloc] initWithContentsOfFile:path];
outerArray = [[NSMutableArray alloc] initWithCapacity:2];
[outerArray addObject:contents];
[contents removeObjectAtIndex:0];
[contents release];
contents = nil;
NSMutableArray *test = [outerArray objectAtIndex:0];
NSLog(@"Test at 0: %@", [test objectAtIndex:0]);
Теперь запутанная часть заключается в следующем: то, что я вижу, это элемент, изначально находящийся в индексе 1 «содержимого», записываемый NSLog. Это не имеет смысла для меня:
- Если бы я добавлял копию 'contents' в 'outerArray', я бы ожидал, что 'test' будет содержать эту копию, и он выведет исходный 0-й элемент 'содержимого'.
- Если бы я добавил указатель на 'contents' в 'outerArray', то я ожидал бы, что строка NSLog выдаст ошибку.
Единственное, о чем я могу думать, - это то, что я добавляю указатель на «содержимое» к «внешнему массиву», но его освобождение не перезаписывает данные. В общем, мне повезло, что NSLog не отказывает, но может и позже.
Это правильно?