我已编写代码来恢复应用程序的状态,但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];
}
答案 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?