Objective-C 中的消息与消息转发

[receiver message];

objective-c的这种有趣的语法被苹果称为“发消息”。与其他面向对象语言(C++/Java)的“方法调用”不同,objc的消息机制是由运行时实现、非常灵活动态。这篇文章简单记录一下objc运行时对于消息发送和转发的实现。

(更多…)

Objective-C 中的类和对象

Objective-C的runtime是开源的,源码可以在苹果官网下载到:objc4

在objc4-532.2以后,苹果把NSObject的实现也挪进来了。想要了解NSObject底层实现终于不用去抠GNUstep了~

好了,下面正文:


1.id和Class的定义

runtime里面,声明了idClass的类型,简化一下如下:

在objc中,id代表了一个对象。根据上面的声明,凡是首地址是*isa的struct指针,都可以被认为是objc中的对象。运行时可以通过isa指针,查找到该对象是属于什么类(Class)。

(更多…)

iOS 第三方开源库的吐槽和备忘

注意:这篇文章已经过期

 

做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽。

目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code、SourceForge等地方。由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库。

首先整理了一份Github上排名靠前的iOS库(大概600个repos)

除了逛一下每日/每月流行之外,也可以到这里来看一下整个iOS Repos的排名。

 

下面是一些比较流行的第三方库:

(更多…)

iOS 如何创建和使用静态库

iOS里可以用静态链接库和动态链接库,但由于Appstore的政策限制,上架应用只能用苹果提供的动态链接库,第三方的库只能做成静态库。这里介绍一下静态链接库的创建方法和常见的一些问题。

 

1. 最常见的方法就是Xcode自带的模板”Cocoa Touch Static Library”。这个很好理解,苹果自己有一个简单的教程,网上也有大把的说明。最终的结果就是一个.a文件和一堆.h头文件。用起来也相对简单:把头文件导入,关联.a静态库,就可以编译了。

下面是一些示例:新浪微博SDK微信SDK

 

2.通过一些方法,将静态库打包成.framework,虽然是静态库,但使用表现上比较接近系统的动态库。目前来看这种方法比第1种好一些,所以推荐用这种方法。手动创建一个静态.framework是非常繁琐的一件事情,详细的过程可以看这里或者这里(中文)。懒人们可以用这个已经做好的模板:iOS-Universal-Framework。制作好后,用起来也就非常简单了,把.framework拖到工程里面就好。

下面是一些示例:百度分享SDK人人网SDK

(更多…)

YYKit — iOS 工具代码库

注意:这篇文章已经过期。

代码在:Github, 文档在:YYKit.

做开发有时需要一些常见的功能,通常随手写一个工具类或是Category就扔到工程里了。次数多了总是想整理出一份常用的代码库。本着“如果有别人洗好的类裤那就直接拿来用”的原则,我还是首先到Github转了一转。sstoolkit无疑是和我的想法最接近的了,但是既然是别人的内裤(雾),穿着总是不太舒服,又闲fork太麻烦,所以到底还是自己搞了一套。

我希望尽量提供和iOS系统风格类似的API,所以代码尽量加到了Category里面并且没有prefix保护。这样,如果把YYKit.framework放到pch文件里面,代码中的方法配色就会变得和系统API一样~~ 坏处就是Category太多了,会占用内存、影响启动速度的(虽然是微乎其微)。 另外不加prefix的话,有可能和系统或者其他第三方库中的同名方法冲突,造成不确定性。。

目前放进去的功能大概有下面这些:

(更多…)

用 appledoc 生成文档

接触过 java 的童鞋们一定知道 javadoc 这种东西,写好代码、码上注释,然后用 javadoc 一跑,一包 html 的文档就生成好了,和 Sun(甲骨文)的官方文档一个调调。在用 eclipse 的时候,代码的自动提示就能显示注释了,html 文档用处不大(对我来说)。但是用 Xcode 开发如果没有文档,确实不太方便。这里就介绍一下 iOS 开发生成文档的方法吧。

(更多…)