微信号:gh_32954f3422e0

介绍:介绍 iOS 开发技巧、刨根问题、最佳实践.孙源 @我就叫Sunny怎么了

【objc】对象、类、类对象

2014-10-25 17:51 sunnyxx

平时说的类(Class)概念是含糊的


@interface Sark : NSObject


@end


其中,Sark本身表示的是个Class的类型,于是我们可以用这个类型来声明一个对象:


Sark *sark;


但是下面的写法中,前面的Sark和后面的Sark表示的就不是一个概念了:


Sark *sark = [Sark new];


向Sark发送消息时,后面的Sark表示一个类对象。考虑下面的代码的区别:


NSStringFromClass(Sark); // Class Type -> ×

NSStringFromClass([Sark class]); // Class object -> √


objc中,每一个类对应两个类对象(Class object, Meta Class Object)

顺着object的isa指针可以先后找到这两个对象。


它们是单例,由编译器根据你的类声明去改写成C语言结构的版本,然后由runtime在程序加载时从Mach-O可执行文件中读取和创建,并存放在一起。

我们可以通过runtime的下面这个方法,取出当前load到程序中的所有类对象:


Class *objc_copyClassList(unsigned int *outCount)


可别弄混了object、class、class object这三者的关系~

 
sunnyxx 更多文章 巧用多字符char常量 0行代码去除 Grouped TableView 上面的空隙 声音断点调试法 【娱乐向】恩,今天是愚人节 【QA】在GCD中控制并发数
猜您喜欢 30岁年薪20万算不算失败? python链接mysql数据库详解 走,去拉斯维加斯看展 | IDG资本大家庭@CES 2017 移+ 时代 : UPYUN 畅谈 CDN 如何助力移动应用创业 技术负责人如何做Headcount预算?