ViewController如何响应Touch事件?

ViewController类都继承自UIResponder类,它们也可以响应Touch事件。ViewController何时响应Touch事件呢?iOS中Touch事件响应是根据响应链来进行处理的,Touch事件会逐个发向各个节点直到这个节点响应这个事件。

而根据SDK记载:
ViewController在响应链中的位于ViewController的view和它的superView之间的,因此只有在Touch在ViewController的view内部,而且viewController的view不响应Touch,ViewController才接受到Touch事件。

阅读全文

如何解决iOS内存错误

由于iOS5.0之前没有自动应用计数机制,也没有Java那样的垃圾回收功能。我们都需要自己管理和控制对象的回收,这是一件很麻烦的事情,也是做iOS项目中最容易出现的问题。如果不掌握这些方法,调试这些问题几乎没有头绪。

EXC_BAD_ACCESS内存错误与NSZombieEnabled

EXC_BAD_ACCESS是最常见的错误了,这个一般是访问了释放了的内存地址空间造成的。比如一个对象已经dealloc了,如果你仍向这个对象发送消息,就会出现这个错误。由于出现这个错误时,几乎不显示什么有用的信息,我们根本无法确定程序错在何处。使用NSZombieEnabled环境变量可以很好的解决这个问题。
打开你的工程,选择菜单“Product->Edit Scheme”或快捷键“Commend+<”

阅读全文

UIApplicationMain函数做了什么

在iOS应用中,每个程序得main函数中都调用了UIApplicationMain函数。

1
2
3
4
5
6
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

阅读全文

再见,上海!

刚到深圳,由于工作比较忙,很久没关注自己的博客了。现在正好想写写之前在上海的一些经历。在上海也呆1年多了,由于工作原因得离开这个繁华的城市。在这里我做过外包,创过业,个中艰辛只能自己体会,它给我一个很好的人生经验。想过自己的理想,而现实往往是残酷的,虽然放弃,有些不舍,但我还是梦想能在新的地方闯出自己的一番天地。

阅读全文

iOS中后台运行

iOS在升级到4.0以后就支持了多任务了。下文将详细介绍一下这个特性。

1、检查设备是否支持多任务

Apple出于性能的考虑,并不是所有的iOS设备升级到iOS4以后都支持多任务,比如iPhone 3G。如果你的应用在没有多任务特性时会出问题,为了保持应用的健壮性,你应该对此进行判断并处理。你可以通过调用UIDevice对象的multitaskingSupported属性来获取当前设备是否支持多任务。

阅读全文

Unix命令行下的管道和I/O重定位

工作过程中,我们可能会需要将一个命令或程序的输出导出到一个文件,比如“svn diff”,或者将一个命令或程序的输出作为另一个命令或程序的输入,这是我们就需要Unix命令行下的管道和I/O重定位功能。

1、命令行下的管道用于将一个命令或程序的输出作为另一个命令或程序的输入。两个命令用管道符“|”隔开。比如:我们可能会用到在某个目录下查找名称中包含某个字段的文件或目录,这时就可以用管道:

1
ls -l | grep test

此命令会列出当前目录下所有名称中包含“test”的文件和目录。它由两个命令组成“ls -l”和“grep test”。“ls -l”会列出当前目录的所有文件并输出,而“grep test”会分析输入中包含“test”的行并显示。因此如果将“ls -l”的输出用于“grep test”的输入就会显示当前目录下所有名称中包含“test”的文件和目录。

阅读全文

中国区GPS偏移纠正(适用于Google地图)

在做iOS开发时,用到一个获取当前位置周边商家的功能。当时每次我在获取从iPhone里GPS返回过来的数据到Google Place API上获取时总是发现,获取的商家并不是最近的,而是几百米以外的。经多次尝试,确实是这样。我在网上搜索一下,发现原来是相关部门和谐掉了。相关部门规定:为了保证国家安全,所有的地图公司提供的地图必须对实际的GPS坐标进行一定的偏移,偏移后的GPS坐标系俗称火星坐标系,而这个偏移是不固定的,具体的算法是国家机密。悲催了,在网上找了很久,终于找到了一个解决方案:网上已经有人根据Google的相关接口,每隔0.1个经纬度获取一个地图偏移像素,把中国区的所有经纬度都转换了,组成一个数据文件。此数据文件是一个连续的结构数组:

阅读全文

如何将一个UIView对象的内容保存为UIImage

在iPhone程序开发中有可能我们会需要将一个View的内容转换成图片。我自己对UIImage进行类扩展,写了一个方法:

1
2
3
4
5
6
7
+ (UIImage*)imageFromView:(UIView*)view{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, view.layer.contentsScale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}

阅读全文

Cocoa的键-值机制(Key-value Mechanisms)

对象的键-值机制是Cocoa的一部分。

  • 键-值绑定(Key-value binding)
  • 键-值编码(Key-value coding)
  • 键-值监听(Key-value observing)

阅读全文

iOS数据库编程

在iPhone的开发过程中常常会用到数据库,而SQLite3是iPhone中支持的数据库。下面简单介绍一下iPhone中SQLite3数据库的用法:

阅读全文