Objective-C Runtime Tricks

说到oc的动态特性尝尝会牵扯到objc 的动态运行时(runtime),在日常的iOS开发中很少和深层次runtime打交道,除非你是个越狱开发者。在一些特定情况下为了完成一些特定功能(如绕过appStore更新app功能)就完全需要了解或者说深入研究一下Objective-C的runtime特性了。

iOS和C语言中关于对象,消息,方法,函数的称谓或有歧义,本文采用如下称谓:

消息:Message
对象:Object
方法;Method
函数:Function
类: Class

##The Runtime
Objective-C是一门非常简单的语言,它95%都是C,只是在C语言上添加了一些关键词和语法(其实C语言真的很复杂). 除了C语言的一些特性,Objective-C的真正灵魂在于它的runtime,而runtime的核心在于message sending,下面慢慢道来。

解决EXC_BAD_ACCESS错误的一种方法–NSZombieEnabled

我们做iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像Thread 1: Program received signal:”EXC_BAD_ACCESS”,让问题无从找起。

比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如release 的对象再 release,release 那些autorelease 的对象等也会报这样的错。默认设置下 Xcode 不会给你定位具体是哪一行代码,不该去使用已释放的对象,或者release 用错了。比如 UIViewController 子类中这样的代码:

开始

做iOS开发也有一段时间了,从超级菜鸟到现在略有一点经验,以后会在这里分享技术、工作和生活。