0
- (void)viewDidAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    _datePicker = [[UIDatePicker alloc] init];
    _datePicker.datePickerMode = UIDatePickerModeDate;

    _datePicker.frame = CGRectMake(70, self.view.frame.size.height ,250,100);
    _datePicker.alpha = 0;
    [_datePicker addTarget:self action:@selector(saveDate:)  forControlEvents:UIControlEventEditingDidEnd];
    [self.view addSubview:_datePicker];
}

我试图弄清楚我的“无限内存增长”在哪里,我在我的应用程序中使用了ARC。我的应用程序中有一些内存问题,我正试图一一解决。

在 2 个 viewController 之间移动时,我可以清楚地看到内存使用量大幅增加,主要原因是我在这里编写的代码。我做错了什么,我该如何释放它以及在哪里?

谢谢

4

1 回答 1

1

viewDidAppear:每次视图出现时都会被调用(即使控制器已经被初始化)。因此,每次视图出现时,您都在分配一个新的 UIDatePicker 而不释放旧的。

如果您的 datePicker 被定义为带有“retain”的@property,那么我会使用

self.datePicker = [[[UIDatePicker alloc] init] autorelease];

通过使用 self.datePicker 您正在调用合成设置器,它将自动为您释放旧值。

或者,您可以将此初始化移动到 initWithNibName: 或 viewDidLoad: ,这样它只会被调用一次。

试试这个,看看它是否有助于你的记忆。

(我假设你没有使用 ARC,否则我所说的对你没有帮助)。

于 2013-01-20T02:55:49.123 回答