加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – UIDatePicker减缓了事情

发布时间:2020-12-16 03:16:21 所属栏目:百科 来源:网络整理
导读:我花了一个很好的时间,并得出结论,UIDatePicker使presentModalViewController慢了几秒钟.我有一个视图控制器与两个按钮和日期选择器.在另一个类中,我使用这个代码来呈现这个视图控制器: RandomClass *class = [[RandomClass alloc] init];[class setModalTr
我花了一个很好的时间,并得出结论,UIDatePicker使presentModalViewController慢了几秒钟.我有一个视图控制器与两个按钮和日期选择器.在另一个类中,我使用这个代码来呈现这个视图控制器:
RandomClass *class = [[RandomClass alloc] init];
[class setModalTransitionStyle: UIModalTransitionStyleCrossDissolve]; //an animation
[self presentModalViewController: class animated: YES];
[class release];

我已经删除了RandomClass中的日期选择器,并注意到我可以很快地呈现RandomClass,当我在视图中插入日期选择器时,它会再次减慢事情.我试图以编程方式添加日期选择器,并以不同的线程呈现模态视图控制器,但仍然存在滞后.

你有同样的问题吗?你知道如何解决它吗?我非常感谢你的答案和帮助.谢谢!

解决方法

我正在经历与模态视图演示相同的缓慢表现.我通过牺牲一些记忆来支持表现来到一个解决方案.

背景:
我的应用程序正在使用Model-View-Controller-Store模型.商店是一个照顾我的模型的单身,因此,一旦实例化,它几乎可以从任何一个类中访问.我正在使用Store类通过属性来保持某些昂贵的类(如NSCalendar,NSDateFormatter等).

解:
我在仓库单身人士中打了一个UIDatePicker属性,允许通过任何类访问它.

在Singleton的界面中:

@property (strong,nonatomic) UIDatePicker *datePicker;

在Singleton的实现中,我为datePicker实现了一个getter.

- (UIDatePicker *)datePicker
{
    if (!_datePicker) {
        _datePicker = [[UIDatePicker alloc] init];
    }

    return _datePicker;
}

这确保了datePicker只被创建一次,它可以从我的应用程序的任何地方访问.

现在在需要使用选择器的类的viewDidLoad方法中,通过getter方法获取属性:

UIDatePicker *aDatePicker = [[MySingleton shareInstance] datePicker];
// Set it's location.
    [aDatePicker setFrame:CGRectMake(0.0,236.0,self.view.frame.size.width,216.0)];
// Connect to any actions
    [aDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
// Add it to you view
    [self.view addSubview:[[MySingleton shareInstance] datePicker]];

第一次创建日期选择器时,会发生缓慢的行为.每隔一段时间,模态视图就会看起来很快(取决于你在视图中还有什么).

本质上我正在创建一个全局变量并保持它,所以我不必每次创建它,而是以内存为代价.性能差异在我的应用案例中是值得的.

注意:
有一个值得注意的注意事项.由于datePicker很可能会超出模态视图,因此必须确保datePicker不指向任何释放的内存.

所以如果在viewDidLoad中将“self”分配为目标:

[aDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

重要的是在诸如viewDidDisappear之类的方法中添加此代码以防止崩溃:

[aDatePicker removeTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读