UIDatePicker 泄漏
Posted
技术标签:
【中文标题】UIDatePicker 泄漏【英文标题】:UIDatePicker leaks 【发布时间】:2012-10-01 13:40:26 【问题描述】:我似乎有一个泄漏的 UIDatePicker。我已经注意到将 datePickerMode 设置为显示日期和时间的内存泄漏。但是,我只是想显示日期。我相当肯定这是一个框架泄漏,因为当我注释掉几个 UIDatePicker 属性分配时,泄漏就消失了。此代码泄漏 1 个 CGColor 对象和 1 个 UIDeviceRGBColor 对象:
datePicker = [[UIDatePicker alloc] initWithFrame:[self detailViewRect]];
datePicker.datePickerMode = UIDatePickerModeDate; //leaks CGColor when setting this
datePicker.hidden = NO;
datePicker.timeZone = [NSTimeZone systemTimeZone]; //leaks UIDeviceRGBColor
datePicker.maximumDate = [NSDate date];//leaks UIDeviceRGBColor
datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
通过评论 Instruments 报告为违规的行,我没有发现任何泄漏:
datePicker = [[UIDatePicker alloc] initWithFrame:[self detailViewRect]];
//datePicker.datePickerMode = UIDatePickerModeDate; //leaks CGColor when setting this
datePicker.hidden = NO;
//datePicker.timeZone = [NSTimeZone systemTimeZone]; //leaks UIDeviceRGBColor
//datePicker.maximumDate = [NSDate date];//leaks UIDeviceRGBColor
datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
至少没有设置日期模式,UIDatePicker 毫无价值。有人有解决方法吗?
【问题讨论】:
您检查过设备上的泄漏吗?还是只在模拟器上?有时模拟器存在设备上不存在的内存泄漏错误。 关于解决方法,泄漏有多严重? @barley 感谢您的提醒。设备上没有泄漏。我没有使用ARC。每次释放日期选择器时,仪器都会报告 50B。我不希望用户频繁使用它。 有同样的问题。我启用了 ARC。如果用户不会经常使用日期选择器,这没什么大不了的。 【参考方案1】:这种方法对我有用:
在 xib 中创建 DatePicker,而不是编程方法。然后,在 Attributes Inspector 上,将 Mode 设置为 Date。
【讨论】:
我想这意味着您之前遇到过问题;并且您通过这样做解决了问题。如果是这样,您在什么环境中工作?您之前尝试过什么导致问题的原因? 我也可以确认,如果您在 IB 中设置这些属性(而不是通过编程方式),UIDatePicker
不会在 Instruments 中显示泄漏。但是,如果您稍后通过代码设置所述属性,UIDatePicker
将会泄漏(即使 UIDatePicker
是在 IB 中创建的)。这显然是框架代码中的一个泄漏,不幸的是,在 Apple 修复它之前,除了接受它会泄漏之外,没有一个好的解决方法......:/
ios 6.1.4 中仍然存在泄漏。我还尝试了与setDate的日期设置:动画:在显示日期选择器之前和之后没有改变,无论如何我在从视图中删除选择器时,我会遇到泄漏,而不是创建时.
我相信这不会成为拒绝的理由。
我在 iOS 8 中遇到了与原始海报相同的问题。这种使用 xib 的解决方案仍然会导致内存泄漏。手动设置UIDatePickerModeDate
或使用属性检查器都调用-[_UIDatePickerMode _yearlessYearForMonth:]
泄漏。以上是关于UIDatePicker 泄漏的主要内容,如果未能解决你的问题,请参考以下文章