Xcode Instruments утверждает, что приведенный ниже код приводит к утечке памяти. Насколько я понимаю, происходит следующее при назначении свойства:
* Старое значение autoreleased
* Новое значение сохраняется
* Новое значение присваивается явно
С, что это умом, как же у меня есть утечка памяти и как ее решить?iPhone NSMutableArray Memory Leak
"TestProjectViewController.h":
#import <UIKit/UIKit.h>
@interface TestProjectViewController : UIViewController {
NSMutableArray* array;
}
@property (nonatomic, retain) NSMutableArray* array;
@end
"TestProjectViewController.m":
#import "TestProjectViewController.h"
@implementation TestProjectViewController
@synthesize array;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
for(int i = 0; i < 5; i++) {
self.array = [[NSMutableArray alloc] init];
[self.array addObject:@"Hello world #1"];
[self.array addObject:@"Hello world #2"];
}
}
Нужно ли освобождать массив вручную, когда это свойство с атрибутом «сохранить»? –
Определенно. Вы также можете освободить массив, вызвав 'self.array = nil;' – kubi
yes, атрибут "сохранить" атрибута определяет поведение соответствующего метода setter - вы увеличиваете количество объектов и увеличиваете количество объектов и, следовательно, должны освобождать этот объект после этого. Если вы измените значение свойства, старый объект будет выпущен автоматически. Если вы уничтожаете свой объект, вы должны освободить все (ранее сохраненные) его члены. Вы можете вызвать 'self.array = nil' в методе dealloc вместо явного выпуска, если хотите – Vladimir