Я не думаю, что вы понимаете, когда оставить и отпустить. Взгляните на этот ТАК вопрос и ответьте . Прочтите его, поймите и прочитайте статьи, на которые он ссылается. Это вам очень поможет. Это важно понять на iPhone.
Ваш массив сохраняется 3 раза, но вам нужен только один:
(1) Когда вы вызываете alloc / init, вы получаете собственный массив (он сохраняется).
(2) Когда вы звоните, удерживайте, это дополнительное удержание.
(3) Ваш сеттер self.myMuArr был определен для сохранения в @property, поэтому при назначении указателя с помощью метода сеттера он снова сохраняется.
Вы обычно видите, что код использует эти два метода, оба являются правильными:
-(void)didGrabData:(NSArray*)theArray {
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:obj1, obj2, nil];
self.myMutArr = arr;
[arr release];
}
Или с помощью arrayWithObjects, который дает вам автоматически освобожденный массив, который вам нужно сохранить, если вы хотите взять на себя ответственность за его пространство памяти и сохранить его. Ваш сеттер сделает это:
-(void)didGrabData:(NSArray*)theArray {
self.myMutArr = [NSMutableArray arrayWithObjects:obj1, obj2, nil];
}