摘要:近期做了关于IOS开发的项目,在开发过程中遇到了很多问题,同时也学到了很多东西。本文从IOS开发过程中常用的几种页面跳转方式入手,分析了开发过程中程序崩溃的原因及IOS开发规范,希望与大家分享和交流,欢迎批评指正。
关键词:页面转换,程序崩溃,开发规范
一、开发过程中几种常用的页面跳转方式
1.1直接更改 UIWindow的rootViewController
创建根视图控制器:self.view.window.rootViewController=[[ViewController alloc]init];UIWindow*window=[[[UIApplicationsharedApplication]delegate]window;将已经创建好的second 页面设置为当前根视图控制器。window.rootViewController = second;使用注意:开发过程中,要实现多页面跳间跳转,这样做代码繁琐,但是容易实现任意页面间跳转。
1.2导航控制器UINavigationController
实现first页面和second页面之间的转换,在first的btn的监听方法中调用:
[self.navigationController pushViewController: second animated:YES];(跳转至second页面)。在second的btn的监听方法中调用:[self.navigationController popViewControllerAnimated:YES];(返回上一页面)。若要实现多个页面之间的跳转并返回根视图控制器调用:[self.navigationController popToRootViewControllerAnimated:YES];使用注意:实现简单,开发中建议使用。
1.3使用模态
在first中调用:[self presentViewController: second animated:YES completion:nil];在second中调用:[self dismissViewControllerAnimated:YES completion:nil];使用注意:present和dismiss通常成对使用,开发过程中实现多个页面之间的跳转,不建议使用该方法,容易出现页面崩溃。
1.4 UITabBarController控制器
通过调用UITabBarController的addChildViewController方法添加子控制器
使用注意:代码量较少,但是tabbar的ios原生样式不美观,在开发中通常不能满足客户要求,如果要使用,可以自定义tabbar。
二、开发中数据加载的问题
页面数据不实时更新,或者上个页面的数据没有传入本页面。解决方法:viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用,用于初始化,加载时用到的。如果数据要实时更新或者从上个页面传入数据到本页面时,应将数据的获取和变动可以写在viewWillAppear函数中。viewWillAppear是页面一出现就会调用。
期刊文章分类查询,尽在期刊图书馆
三、开发中常见的程序崩溃原因
3.1 TableView滑动中常出现的问题
在tableview 滑动过程中,更改cell中数据,如果不及时刷新,页面会出现崩溃。解决方法:在更改数据和刷新表之间不应该做其他操作,否则会产生延迟,为了避免延迟的发生,在更改数据后立即刷新表。
3.2 使用MJRefresh刷新有时候会导致程序崩溃
在刷新时导致程序崩溃,多数原因是由于数据源数组越界。在拖动的过程中如果数据量大,会有cell出到屏幕外面,在松手之后cellForRowAtIndexPath会被调用,在松手的时候调用了获取数据方法,方法刚开始就清除了原来的数组,然后接口返回的数据再放入数组,但是在数据被清除之后系统恰巧调用了cellForRowAtIndexPath,,所以会导致程序崩溃。解决方法:先获取成功再清空数据,然后把获取的数据装进去再去,刷新tableview或者collectionview。避免不要在没有获取到数据的时候清空原来的数据。
3.3 服务器返回数据为空导致程序崩溃
解决方法:使用AFNetworking进行请求过滤。((AFJSONResponseSerializer *)manager.responseSerializer).removesKeysWithNullValues = YES。
四、数据类型问题
使用AFNetWorking获取网络数据时,数据库中的值类型是double类型,数值是-76.240,但是用AFNetWorking获取解析后的数据,此时的数据变成了-76.23999....。解决方法:接口统一适用string类型。
五、用户密码安全性问题
为了保护用户的密码安全,客户会提供特定的规范:1.对所有用户的密码要求;2.密码需要做MD5处理,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。安全性大大提高。例如:APP发给服务端前做一次md5处理:pwd2=md5(pwd1+salt),服务端将密码保存到数据库前再做一次md5处理:pwd3=md5(pwd2+salt),pwd1为用户输入的原始密码,pwd2为APP发送给服务端的密码,pwd3为保存到数据库中的密码。
六、常见的iOS开发规范
1.适配iOS8+以上的系统,特别要适配iOS10。
2.使用cocoaPods管理和使用三方框架。
3.三方框架规范:网络请求:AFNNetWorking;字典转模型:MJExtension;下拉刷新: MJRefresh;约束:Masonary;图片缓存: SDWebImage;最好选择start数量较高,且近期有人维护的框架。
参考文献:
[1]IOS重用机制研究与实践[J]. 黄浏展. 软件导刊. 2014(11).
[2]iOS开发UITableView加载图片的内存管理[J]. 黄天柱,涂时亮. 计算机系统应用. 2012(09).
[3]iOS中基于UITableView的大批量数据加载优化[J]. 刘辰基等. 杭州电子科技大学学报. 2013(04).
论文作者:崔佩佩
论文发表刊物:《科技中国》2017年8期
论文发表时间:2017/12/13
标签:数据论文; 页面论文; 密码论文; 跳转论文; 过程中论文; 方法论文; 控制器论文; 《科技中国》2017年8期论文;