博客迁移好多回,数据备份好多遍,索性不再折腾了。
目前用Ulysses和Medium配合起来工作,实际证明Medium排版太难用。
iOS开发有些年头了,除了一些私人库,一直没写点像样的总结。
赶在swift3.0 发布之前,看看objc源码,做个小结,也算对自己做个交代。
阅读内容如下,后面会做适当调整。
- objective-c 源码
- runtime 源码
- foundation 框架源码
- swift 3.0 源码
objective-c 源码环境配置
两个版本源码库,都基于objc 680版本,前者在官方版的基础上,修复了一些编译问题,加入了调试target。同时与官方版的项目结构同步,后期逐步完善源码注释。
#更新版本
git clone git@github.com:phnessu4/objc-runtime.git
#官方版本
git clone git@github.com:opensource-apple/objc4.git
项目clone成功后。直接运行objc.xcodeproj
即可。
使用clang rewrite objective-c代码
阅读源码,可以加深了解底层实现设计,如果看oc代码不能满足你的好奇心。这时可以用clang将oc代码转换为c++实现,让你着手于更深层次。
# 正常转换
clang -rewrite-objc class.m
# 个别系统sdk指定,waring屏蔽等等。复杂使用请参考clang手册。
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk class.m
clang -Wall -pedantic -Wextra -rewrite-objc -c class.m
举例class.m
#include <objc/NSObject.h>
@interface OCObject : NSObject @end
@implementation OCObject @end
需要注意,虽然class.m 只有一个类定义,但转换后代码量确不少,系统定义占据了大半部分。
转换结果详见 git gist
Comments | NOTHING