使用从App Delegate调用的RootViewController中的NSMutableArray进行内存泄漏

时间:2010-06-16 14:13:12

标签: iphone xcode memory nsmutablearray memory-leaks

我已编写代码来恢复应用程序的状态,但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 :(得分:0)

如果您在nil中将其设置为viewDidUnload,那么您要在dealloc中发布什么内容? 你应该做的

self.offendingNSMutableArray = nil;
dealloc中的

,这是保留属性的常用方法。

编辑:现在从上面的评论中看到它。你需要autorelease你做alloc / init。财产制定者将保留。

答案 1 :(得分:0)

好的,所以看起来我通过添加自动释放来解决泄漏:

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

但我认为我不想使用autorelease,因为我在应用程序的其他地方引用了offendingNSMutableArray?