工程
有网络请求的页面,返回时注意添加取消网络请求操作
-(void)addCancalHttp;
网络请求判断步骤:
一、 网络连接失败
异常流提示:网络连接失败,请稍后重试!
二、 网络连接正常
1、 判断原始数据responseData是否为空(抛异常时异常流应为返回数据异常)
2、 转json格式[jsonResult chJSONValue],判断json是否为空(抛异常时异常流应为数据解析失败)
3、 判断数据类型,如NSDictionary, NSArray,(抛异常时异常流应为数据格式不正确)
4、 判断NSDictionary, NSArray是否有数据,(抛异常时异常流应为没有数据)
5、 如果为NSDictionary判断ifSuccess是否等于@"Y",如果为@"N"时,异常流要用后台返回的description
6、 解析数据,返回
常规
1,创建NSDictionary NSArray 元素非空判断
2,NSArray 数组越界
3,发送消息 数据类型不正确 (常出现在后台返回数据)
4,碰到添加阴影时,注意性能
5、自己添加缓存数据时,注意增加版本号
6、修改任何公共的模块,要注意问一下当时做这个模块的人
7、按钮独占事件
**8、当一个界面有push和pop的时候,两个操作相隔时间很短,一个动画未结束,另外一个动画已经开始,导致动画冲突crash,应添加如下代码 if (self.navigationController.topViewController != self) **
9、加载一次性大图片并且不在tableview中使用时用imageWithContentsOfFile(如新版本引导页,背景大图片等不需要一直放在应用缓存中的图片)。小图片或者在tableview中使用的图片可以用imageNamed
10、代理只能用weak,不能用assign和strong
11、数组中循环删除多条数据时,不能使用for(in)
12、在异步线程中不要做任何与UI相关的操作,与UI相关的操作都放进主线程中
13、强制性要求:在项目中往数组或字典中塞值时,以及从网上拿到数据时,都要先做非空转换
14、在做writeToFile读写操作时,记得加try catch或者线程锁,防止多线程同时修改和写入同一个文件导致Crash
15、注意NSDateFormatter非线程安全特性,网上说IOS7以后NSDateFormatter已经变成线程按钮,但实践证明并没有。使用NSDateFormatter时最好是在使用的时候创建,但是创建NSDateFormatter是一个耗时操作,大量创建NSDateFormatter会产生性能问题。加锁会导致线程阻塞问题。具体如何使用看情景。
16、日期转换时,要注意时差问题,建议都将其转换成GMT时间。这样在将日期字符串转换成NSDate,再将NSDate转换成日期字符串时,前后日期字符串不会有差异。(千万不要日期字符串转换成NSDate使用一种时间,NSDate转换成日期字符串时使用另一种时间)