iOS开发经验总结(一)
软件开发方面
1.在每个页面的入口和出口(一般是viewDidLoad和dealloc)打上日志,可以了解用户的操作流程,并查出页面在关闭时是否销毁了相应的对象。
2.定时器NSTimer需要在一个新线程中运行,否则UI操作会阻塞定时器。
3.需要为定时器所在的线程设置NSRunLoop,否则定时器可能不会动。
4.如果在线程中设置了NSRunLoop,需要在销毁线程时也将其停止,使用CFRunLoopStop。
5.所有的UI操作都应该在主线程中执行,否则会导致应用崩溃(不一定是立即崩溃)。
6.如果项目中有c函数,出现同名的函数会导致应用编译失败,即使这些c函数处于不同的页面中。
7.使用ASIHttpRequest,同步下载过程是不能被取消的,异步下载过程才可以被取消。
8.应用内支付,支付成功的回调里面,还需要对加密数据transactionReceipt进行验证,避免越狱的机器使用IAPFree等软件伪造数据。
9.不要试图获取设备的UDID,否则会造成应用审核不通过。可以使用OpenUDID或者Mac地址代替。
10.将比较费时的操作不要放在主线程中执行,避免UI响应慢。应该在一个新线程中执行(对有同步要求的操作除外)。
11.使用最新的XcodeandiOSSDK进行开发,对高版本的兼容性会好一些。例如Mac10.6下只能安装Xcode4.2andiOSSDK5.0,对iOS5.1版本的系统就不能直接调试。
12.图片命名:例如有一张图片为MyImage.png,为了兼容不同设备,需要存为不同分辨率的图片,命名规则如下:
MyImage.png-默认的图片名称。
[email protected]适用于Retina显示屏的高分辨率图片。
MyImage~iphone.png-适用于iPhone和iPodtouch的图片。
MyImage@2x~iphone.png-适用于iPhoneandiPodtouch设备Retina显示屏的高分辨率图片。
在显示图片时,只需要直接取@"MyImage.png",系统就能根据当前的设备,自动读取相应的图片了。
注意:以上图片命名规则只使用于UIKit框架。如果使用了cocos2d等其他框架,则有另外一套命名规则。
一些好用的框架/组件:
1.PDColoredProgressView进度条组件,可以设置进度条的颜色,支持iOS4。但是在ASIHttpRequest的下载进度条中不好使用。
2.MTLabel可以对label中的文字设置行高。
3.TSAlertView可以在弹出框(UIAlertView)中设置输入框,类似于JavaScript中的prompt。
4.ZipArchive对文件进行压缩和解压操作。
5.ASIHTTPRequest数据的上传和下载,以及断点续传。
6.json-framework文件格式解析。
性能优化
1.使用xcode自带的Instruments工具可以查看应用的内存,cpu等资源使用情况。
2.JSON格式解析速度优化。有人分析说JSONKit比json-framework效率更高。
日志跟踪
1.友盟,比较全面的数据分析工具。
2.Crashlytics.framework可以记录应用程序崩溃日志,并快速定位到出问题的代码行。