一个模拟网页表单请求封装类(支持文件上传)

自己在作项目时经常会遇到要上传文件同时还要附带一些字符串参数的网络请求,由于文件有时是二进制数据,采用http查询参数就不太适合了。最好的方式是采取Web表单的方式上传文件,自己写了这么一个类,就分享一下。
代码地址:https://github.com/shenqiliang/HTTPForm-iOS

阅读全文

_objc_setProperty_nonatomic和_objc_setProperty_atomic运行时没有找到的问题

上次我们一个项目在iOS6上运行正常,但在iOS5.0上运行时却出现了一个错误:

1
dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic

阅读全文

最新Xcode编译出现的问题

iOS6发布的时候,我下载了新的SDK,Xcode也更新到了4.5。那时我们的app正好要提交AppStore,我就尝试用新的Xcode编译开发包。但是在提交时,发现总是验证失败提交不成功。原因是说我的binary里没有armv6的包,但我检查了编译选项发现在Architectures和Valid Architectures里都包含里armv6。折腾了好久,原来我忽略了一个警告。本来我一直都很重视警告,但是我在旧版本的Xcode里编译时1个警告都没有,所以我以为只是新版Xcode环境问题,也没太在意,但问题就是这个警告说明的问题。我用nm命令看了一下包,原来真的没有armv6的binary。查看了相关资料发现原来新版本(4.5以上)的Xcode已经不在armv6处理器了!所以即使你的编译选项里明确指定armv6,也是无效的。所以编译后的包只有armv7。而我的app最低支持版本是4.0。在4.3以下的支持,AppStore会要求必须有armv6的binary,所以提交不了。所以如果app要支持4.3以下就必须用低版本Xcode编译了,否则app就只能支持4.3以上了。

阅读全文

一个用于Objective-C静态检查的工具-occheck

在ObjC的MRC(手动引用计数)内存管理时, 使用引用计数来维护内存的回收,引用计数的错误常常导致内存泄漏。有一个很常见的错误就是一个retain的属性或成员没有在dealloc中释放。而这种错误用静态代码分析工具检测不出来。当代码写的很多时,一个类一个类的检查很麻烦,而且容易疏露。我写了一个自动检查这种错误的小工具(occheck)。另外这个工具还能检查代码中的高危函数。

安装occheck(有些同学反馈command not fond的解决方法):
occheck是个二进制命令行工具,拷贝到/usr/bin目录下才可以直接在终端中输入使用。

阅读全文

解决Xcode中Code sense无效问题

Code sense是Xcode中一项重要功能,它给代码加入高亮色彩,方便我们进行辨识,同时在写代码时自动提示出相关备选项,极大地提高我们的开发效率。

当我们写代码时,Xcode的Code sense会经常失效,严重影响开发。下面这几个步骤可以很轻松的解决这个问题。

首先关闭工程,点击Xcode的菜单“Window”-“Organizer”,在“Organizer”窗口中选择“Projects”标签。在左侧列表中选择你的工程或Workspace,在右侧的Derived Data行中,点击此行右边“Delete…”按钮,弹出提示时选择“Delete”。

阅读全文

iOS键盘消息通知

iOS开始时经常会在键盘显示时调整界面布局,iOS 5中当切换为中文输入法时,键盘高度会增加,同时给iPad的键盘增加了分割功能,使得键盘处理情况更加多样化。键盘的消息通知有:

阅读全文

iOS中日志打印Q&A

Q:如何打印当前的函数和行号?

A:我们可以在打印时使用一些预编译宏作为打印参数,来打印当前的函数和行号。如:

通知
1
NSLog(@"%s:%d obj=%@", __func__, __LINE__, obj);

阅读全文

老MacBook升级内存记

我的MacBook是2008年末期的一款,当时手头不是很宽裕,但是看到这么顺眼的本本,再加上自己本身搞这一行,忍痛透支信用卡买了一个。它是最后一款铝合金外壳的MacBook了,后来铝合金的都是MacBook Pro了,160G硬盘,Core2 2G,2G内存。2年前感觉硬盘实在太小,换了一个320G的,撑到现在。

阅读全文

实测xib(nib)文件创建ViewController的性能

逛开发论坛时经常发现一些同学说使用nib文件能提高性能,我对此保持怀疑态度,毕竟它是要读取并解析一个文件的。本着事实求是的精神,我实测了一下,对比使用nib和使用代码创建view的效率。

首先我创建了两个ViewController,分别是XIBViewController和NoXIBViewController,前者会使用一个nib文件初始化,而后者不会。为了测试我让每个ViewController都循环初始化很多次,并调用view属性的getter,这样才能保持ViewController加载View。基本代码如下:

阅读全文

如何查看iOS App包中的png图片

当我们获取到一些iOS的app包后,发现里面的png图片使用系统的预览看不了。因为在Xcode生成应用程序包时,自动将png图片进行优化,而优化后的图片不能直接使用预览查看,这个优化工具是pngcrush。它也提供了还原的功能,使图片再度可见。为了批量处理这些图片,我写了一个脚本pngdecode:

阅读全文