Posts Tagged "runtime"

Xcode7 插件开发:从开发到pull到Alcatraz

开发 Xcode很强大,但是有些封闭,官方并没有提供Xcode插件开发的文档。喵神的教程比较全,也比较适合入门。本文的教程只是作为我在开发FKConsole的过程中的总结,并不会很全面。 FKConsole是我开发的一个用于在Xcode控制台显示中文的插件,很小,很简单。这个插件开发的初衷是因为一个朋友有这种需求,而又没有找到相应的插件。如果不使用插件,就要在工程中嵌入文件,他并不乐意。所以FKConsole在设计上只会去修改Xcode控制台内的文字显示,绝不会去修改你的文件,这点大家可以放心。 模板 因为现在已经有很多人做Xcode插件开发了,所以插件模板这种东西也就应运而生了。 Xcode-Plugin-Template是一个Xcode插件开发的基本模板,可以使用Alcatraz直接安装,支持Xcode 6+。 安装完成之后,在创建工程的时候,会出现一个Xcode Plugin的选项,这个就是Xcode的插件工程模板。 模板会生成NSObject_Extension和你的工程名称一样的两个文件(.m)。 NSObject_Extension.m中的+ (void)pluginDidLoad:(NSBundle *)plugin方法也是整个插件的入口。 一般来说,我们希望我们的插件是存活于整个Xcode的生命周期的,所以一般是一个单例,这个在另一个文件中会有体现。 添加按钮 这篇博文是记录FKConsole开发过程的,自然以此举例。 Xcode启动之后,会发出NSApplicationDidFinishLaunchingNotification的通知,…

Objective-C runtime常见用法

runtime是Objective-C上一个非常强大的屠龙刀,提供了很多奇幻的魔法,当然,如果过度滥用的话,维护上的代价也是显而易见的。 我们这里只讨论一下我们平常工作中常用的特性,当然,它有大量功能,只是我们并不一定用的到,类似objc_msgSend这种的我们也不作介绍。 Objective-C runtime已经开源了,有阅读源码习惯的程序员可以前往官网下载阅读。 下面是下载地址: http://www.opensource.apple.com/tarballs/objc4/ 添加、获取属性 以开源库SVPullToRefresh(SVPullToRefresh是一个提供上下拉刷新的库)举例。 在UIScrollView+SVPullToRefresh这个Category上,SVPullToRefresh 给UIScrollView动态添加了一个属性,我们以SVPullToRefreshView *pullToRefreshView这个属性举例。 在UIScrollView+SVPullToRefresh.h上先申明了这个属性 @property (nonatomic, strong, readonly) SVPullToRefreshView *pullToRefreshView; 之后,在UIScrollView+SVPullToRefresh.m中重写了它的Setter和Getter方法,分别如下: Setter: - (void)…

Objective-C中为什么不支持泛型方法

今天和网易的一位朋友交流,我和他说,我下面的app会用Swift+函数式编程方式去写,然后他说 Swift大公司都用的较少, 因为新东西,都怕不稳定, 尽量把Objective-C学的精深一些 是的,最近一段时间我看了一些Python的书,使用web.py和django写了点模仿豆瓣和拉钩的demo,我也在学习Swift,使用ReactiveCocoa。最近的时间都花在了这个上面,这是否是一种舍本求末的做法,我不知道,但是Desperado同志确实提醒了我,Objective-C是我现在的饭碗。(另外,我再瞻仰一下Desperado在北京的工资...) 言归正转,我们一起来探究一下Objective-C中为什么不支持泛型方法。 每当探讨此类语言级别对某一个特性的支持的时候,其实很多时候是在探讨这个语言的设计者对这门语言的设计哲学。比如说,很多语言不支持多继承,可能并不是实现不了,也不是不好实现(松本行弘的Ruby就使用了一个很好的多继承实现方式),可能是作者认为马就应该是马,驴就应该是驴,不存在一个又是马、又是驴的物种,顶多是一个物种具有另一个物种的某些特性和行为。这只是我的猜测,别当真。 这里,我尝试从Objective-C的Method方法的具体实现上去解释为什么Objective-C不支持泛型方法。 首先,我们去看一下Objective-C中的方法”Method”是怎样的一个数据结构。 我们先下载一下苹果开源的Objective-C runtime的源码,在下面的地址上: http://opensource.apple.…