ios - 由于 UIDatePicker 导致的内存问题

标签 ios cocoa-touch cocoa

- (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 之间移动时,我可以清楚地看到内存使用量大幅增加,其主要原因是我在这里编写的代码。我做错了什么,如何释放它以及在哪里?

谢谢

最佳答案

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

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

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

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

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

试试这个,看看它是否有助于你的内存。

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

关于ios - 由于 UIDatePicker 导致的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14420345/

相关文章:

ios - 如何通过 VPN 连接发送所有流量?

iphone - 我是否需要像这段代码中那样在 viewDidLoad 中将这些变量设置为 nil ?

objective-c - 查明给定字符是否表示为键盘上的物理键 (Mac OS X)

ios - 是否可以在 Xcode 中重构 Objective-C++ 代码

objective-c - AppDelegate 记录为 NSButton

ios - 如何在 iOS 上的 View 之间切换

在 iOS 9 中设置 UIWindow rootViewController 后 iOS 应用程序崩溃

ios - 如何在核心数据中设置与对象的关系?

ios - 在钥匙串(keychain)中保存数组

objective-c - UITableView,是否可以使用左对齐和右对齐在同一单元格中包含2个字符串?