`

ios 开发经验总结

    博客分类:
  • ios
 
阅读更多

所有的UI操作,都要切换到主线程中进行.否则,会发生莫名其妙的错误.


在主线程中,runloop默认是开启状态的。非主线程中,如果要用到runloop,必须手动开启runloop。关于runloop知识。


对于常见的EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION,错误,一般都是因为访问已经被release的对象造成的。尤其是在一个线程中访问另外一个线程的autorelease库中的对象,尤其要注意此类问题。


严格遵守iphone 内存管理手册,对于不是由你创建的对象,不要越权release,否则,可能会导致程序crash.有时,一些看起来非常严重的bug,在经过N过次努力,多种思路尝试fix之后,再回头分析bug产生的原因,你会发现,造成这个严重bug的原因,很可能是你违反了一个众所周知的规则引起的.这个规则你非常清楚,熟悉,但就是在coding的时候,稍不留神违反了它.于是就带来了灾难性后果.


除了面向对象的cocoa外,iphone编程不要忘记非面向对象的Core Foundation。 面向对象库里很多没有的功能,可以尝试在Core Foundation里找找。披如:RSA算法,MD5算法,SHA1算法,AES加密算法等,cocoa对象库里并没有相应的实现,但在core foundation里,均有相应的实现。NSString类里没有的字符串编码GBK,GB2312,GB18030等,在 CoreFoundation里,能找到相应的编码。建立socket连接,获得输入流和输出流时,也需要使用Core Foundation里的CFNetwork api。等等。


通过设置NSZombieEnabled参数,有非常有效帮助解决内存释放错误。


在消除某个对象时,如果为该对象设置了delegate,则需要先将delegate设成nil,这是一种良好的代码习惯。


在3.0 的Simulator上使用Instruments 检测内存泄漏时,无法看到函数名,只能看到一些地址指针.在3.1,3.1.2,3.1.3的simulator都正常,能够正常地看到是在哪个函数中存在的内存泄漏.


通过Nib文件加载viewcontroller的各种UI控件时时,在viewDidLoad函数里,viewController的控件才能使用。在viewcontroller的构造函数里,nib里的控件都还没有完成链接构造呢。


 iPhone程序崩溃不要着急。可以结合使用Console和objc_exception_throw可以快速定位根源所在。


在CFNetwork中,有时候使用CFWriteStreamWrite方法写数据时,会导致该现成被长久block住。原因:在 CFWriteStream不能接受数据时,写数据了。具体解决办法:在CFSriteStream收到异步的 kCFStreamEventCanAcceptBytes通知时,再开始写数据。此时可避免CFWriteStreamWrite导致线程被block 的情形。


使用Eavesdrop 抓取网络数据包。


在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需要图片引用作为参数.通过在实际使用过程中,比较发现: UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的图片数据量大很多.譬如,同样是读取摄像头拍摄的同样景色的照片, UIImagePNGRepresentation()返回的数据量大小为199K ,而 UIImageJPEGRepresentation(UIImage* image, 1.0)返回的数据量大小只为140KB,比前者少了50多KB.如果对图片的清晰度要求不高,还可以通过设置 UIImageJPEGRepresentation函数的第二个参数,大幅度降低图片数据量.譬如,刚才拍摄的图片, 通过调用UIImageJPEGRepresentation(UIImage* image, 1.0)读取数据时,返回的数据大小为140KB,但更改压缩系数后,通过调用UIImageJPEGRepresentation(UIImage* image, 0.5)读取数据时,返回的数据大小只有11KB多,大大压缩了图片的数据量 ,而且从视角角度看,图片的质量并没有明显的降低.因此,在读取图片数据内容时,建议优先使用UIImageJPEGRepresentation,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小.


分享到:
评论

相关推荐

    多年iOS开发经验总结

    ios开发常用到的API,适用于ios开发者,iOS开发经验总结

    两年的iOS开发经验项目总结

    一本自己总结的开发资料,很基础,希望给大家带来帮助

    ios开发经验和技巧

    本人总结的关于ios开发的心得,已经从事两年的ios开发,对于ios项目各方面注意的地方有些心得

    ios学习资料总结

    这是某位开发人员总结一年ios开发的经验总结,有很多值得学习的!

    iOS开发你需要知道的

    此资源是本人从事iOS开发以来,实际工作中遇到的问题及坑点的总结。皆在为后来者提供一种思路或解决方案, “授人以鱼,不如授人以渔”就是这个道理。 希望我的这些开发中的工作经验能真正的帮助到你, 此为本人分享...

    iOS应用逆向工程

    中高级iOS开发人员;架构师    全球首本讲解iOS8应用逆向工程的实战手册,作者毫无保留地分享了数年来在iOS逆向工程领域的经验;  内容系统深入,逻辑紧密,实战性强,从iOS系统架构等理论出发,以多个实例贯穿...

    iOS DevCamp幻灯片分享:社区类iPhone应用开发的技术实践 | 麻麻帮 陈剑飞

    主题简介:很多iPhone应用产品的开发,并没有多少技术亮点,而更多的是对各种iOS开发技术的灵活掌握和应用,以及经验的积累。本演讲将结合讲师这些年自学iPhone开发的历程,结合自己多个应用开发实践的案例,与大家...

    iPhone与iPad开发实战:iOS经典应用剖析

    从事iOS开发多年,曾开发“神农诀”网络游戏iPhone客户端软件,国家农垦产品追溯系统iPad版客户端,金融行业微博iOS客户端,以及iPhone手机充值应用,LeBallon游戏等多款App Store上线产品。为银河、CSTP、安博和...

    25条提高iOSApp性能的建议和技巧

    根据多年开发经验总结提高iOSAPP性能的建议和技巧,可作为开发者的参考工具。

    iOS应用逆向工程(第2版)

    全球第一本讲解iOS8应用逆向工程的实战手册,作者毫无保留地分享了数年来在iOS逆向工程领域的经验。 内容系统深入,逻辑紧密,实战性强,从iOS系统架构等理论出发,以多个实例贯穿全书,阐述class-dump、Theos、...

    iOS开发的22个奇谲巧技

    本文作者@叶孤城___,他结合自身的实践开发经验总结出了22个iOS开发的小技巧,以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题,光读着便已忍俊不禁。类似于图1,我不想让下面的那些空显示。很简单,添加...

    黑苹果系统(ios开发环境)安装教程

    根据在Z460机型安装黑苹果系统的经验总结的教程,难免出现纰漏和错误,欢迎朋友没予以指出。请尊重原作者版权,转载请注明出处,谢谢。

    iOS 6实践指南与源码

    一位20年开发经验的前辈总结的资料,内含随书源码,ios开发入门不错的资料

    iOS支付组件封装(微信,支付宝,银联)

    本人在iOS开发过程中,通过对微信,支付宝,银联等三方支付库的集成的经验。总结并进行了二次的抽象与封装,将三种支付方式封装为统一的支付接口并提供给客户端来使用。

    微信小程序开发BUG经验总结

    小程序开发越来越热,开发中遇到各种各样的bug,在此总结了一些比较容易掉进去的坑分享给大家。 1. new Date跨平台兼容性问题 在Andriod使用 new Date(“2018-05-30 00:00:00”) 木有问题,但是在ios下面识别不...

    使用github管理iOS分布式项目开发

    在我们iOS项目开发过程中, 我们的团队成员都是分散的、分布式,这个项目管理带来了挑战。Git是一个能够进行版本管理的软件,它是cvs和svn的未来。下面我根据我们的经验总结一些心得如下:你是可以根据自己的需要...

    数学中国-美赛经验总结.pdf

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...

Global site tag (gtag.js) - Google Analytics