【问题标题】:UIDatePicker UISectionRowData huge memory allocationUIDatePicker UISectionRowData 巨大的内存分配
【发布时间】:2012-12-21 10:00:10
【问题描述】:

我设置了多个视图控制器,每个视图中都有一个 UIDatePicker。我开始使用泄漏工具进行测试,日期选择器没有泄漏。接下来我开始使用分配工具进行测试,这就是我发现所有问题的地方。每个日期选择器都在 viewDidLoad 中初始化,我将 datepicker 模式设置如下:

datePicker.datePickerMode = UIDatePickerModeDate;

每次显示包含日期选择器的视图控制器时,都会分配多个“Malloc 392 KB”,最终导致应用程序崩溃。当深入挖掘分配工具时,它指出负责的调用者是 [UISectionRowData:RefreshWithSection....]。我不知道如何解决这个问题并解决它。任何帮助都会很棒。附件是分配工具的一些屏幕截图。

【问题讨论】:

  • 最近遇到过这个问题。这个问题是否有另一种解决方案,而不是在 viewWillDisappear 中将日期选择器设置为 nil?
  • 有同样的问题。在 iOS 6.1 上进行测试。内存最终会被释放,但内存峰值有时足以杀死我在内存较少的旧设备上的应用。

标签: iphone ios xcode uidatepicker


【解决方案1】:

我觉得行

datePicker.datePickerMode = UIDatePickerModeDate;

可能具有误导性,它可能是导致泄漏的下一行

date.inputView = datePicker;

我的猜测是 date 有一个合成的 inputView 变量,它保留了对象。鉴于您正在执行 alloc 和 init 并且此行没有自动释放...

datePicker = [[UIDatePicker alloc]init]

我预计这是泄漏,但很难说,因为您可能稍后会调用 release,但如果不是,这将是我的猜测。

【讨论】:

  • 我会调查的。谢谢!
  • 在 viewWillDisapear 我只是设置 date.inputView = nil 并释放选择器
【解决方案2】:

尝试通过编码创建您的UIDatePicker。并在需要的时候初始化它,不要在viewDidLoadviewWillAppear中初始化它说你有一个按钮,当它被点击时你初始化UIDatePicker

当用户完成选择日期时,将其从 superview 和 datePicker=nil; 中删除。这样你就可以节省内存,只要 UIDatePicker 可见,它就会被使用。

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 2023-03-03
    • 2012-04-16
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多