Утечка памяти при использовании NSMutableArray в RootViewController, вызываемом из делегата приложения - PullRequest
0 голосов
/ 16 июня 2010

Я написал код для восстановления состояния моего приложения, но в NSMutableArray есть утечка памяти. Я новичок в Xcode, поэтому я прошу прощения, если это что-то тривиальное, что я упустил из виду. Любая помощь приветствуется. LQ

AppDelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    [rootViewController restoreState];
}

RootViewController.h

@interface rootViewController : UIViewController {
    NSMutableArray  *offendingNSMutableArray;
}
@property (nonatomic, retain) NSMutableArray *offendingNSMutableArray;

RootViewController.m

@synthesize offendingNSMutableArray;

- (void)restoreState {
    // Gets an array stored in the user defaults plist
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    self.offendingNSMutableArray = [[NSMutableArray alloc]    
            initWithArray:[userDefaults objectForKey:kArrayValue]];
}

- (void)viewDidUnload {
    self.offendingNSMutableArray = nil;
}

- (void)dealloc {
    [offendingNSMutableArray release];
}

Ответы [ 2 ]

0 голосов
/ 16 июня 2010

ОК, похоже, я устраняю утечку, добавляя авто-релиз:

- (void)restoreState {
    // Gets an array stored in the user defaults plist
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    self.offendingNSMutableArray = [[[NSMutableArray alloc]    
        initWithArray:[userDefaults objectForKey:kArrayValue]] autorelease];
}

Но я подумал, что не хочу использовать авто-релиз, потому что ссылаюсь на бумаг*

0 голосов
/ 16 июня 2010

Если вы установите nil в viewDidUnload, что вы собираетесь выпустить в dealloc?Вы должны просто сделать

self.offendingNSMutableArray = nil;

в dealloc, это обычный способ для сохраненных свойств.

РЕДАКТИРОВАТЬ: См. Это сейчас в комментарии выше.Вам нужно авто-релиз, где вы делаете alloc / init.Установщик свойства сохранит.

...