Object C中id类型和NSObject类型的理解

NSObject类型可以类比于java中的Object类,是所有类的基类。NSObject有一个Class类型的isa字段,Class表示的是struct objc_class *类型,isa表示的是对象所属的类型。需要说明的是object_class结构体中只有一个Class类型的isa,看到这里迷惑了,也就是说object_class中一个指向object_class类型的变量isa。

我尝试去理解一下,首先NSObject表示的是一个类类型,这个类类型加载到内存怎么表示呢?我理解就是一个object_class的结构体,这个结构体是不是能理解成一个类Class呢?这样NSObject表示的类类型在内存中其实也是一个类Class的对象。就好像java一样,所有的类在内存中的表示其实都是类Class的对象,这不是这些特殊对象是运行时自动创建的。也不知道这样理解对不对!!!

不管上面描述的对不对,有一点可以肯定是,Object C和java中的类类型,在内存中是某个类的对象实例表示的。

[NSObject class]返回的就是表示NSObject类型的类对象,和Object.class是一个意思。

[NSObject class]返回的就是一个self,self很神奇,在Object C是关键字,在类中就是表示类对象,在对象中就表示当前对象;比java中的this牛逼多了,在java中this是不能表示类对象的。

 

在OC还有一个id类型,这是一种神奇类型的存在,虽然很多文章说id和NSObject是一样的其实是不一样的,id在调用方法的时候,都不需要类型转换的,可以直接调用。这个我理解,这是OC对动态类型的支持,也就是说对于用id声明的变量,在编译期是不会进行类型检查的,所以给id声明的变量赋任何类型的值,调用任何类型的方法,在编译期都是可以编译通过的,不过在运行期就会有出错的风险。看这篇文章中的例子Mac NSDictionary 和Java HashMap比较

 

深入学习Objective-C(一):揭开NSObject的面纱

Objective-C基础学习之id类型

iOS中的NSObject*、id和instancetype

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值