黑马程序员技术交流社区

标题: 关于id指针 [打印本页]

作者: liu01230    时间: 2015-5-15 21:57
标题: 关于id指针
id指针是万能指针 ,它可以指向任何OC对象。但是为什么不直接用NSObject类型的指针,它不是也能指向任何OC对象吗

作者: 丶浩浩丶    时间: 2015-5-15 22:44
NSObject和id都能指向任何对象

NSObject会做编译时检查(需要强制转换)

id不需要强制类型转换,id可以直接用,编译器看到id时,认为是动态类型,不会在检查类型

        NSObject *p2 = [[Person alloc] init];
        
        [(Person*)p2 run];
   
        id p3 = [[Person alloc] init];
        [p3 run];

都可以创建对象,但是调用对象方法的时候一个需要强制转换,一个不用.
作者: 追随自然    时间: 2015-5-15 23:39
学到东西!
作者: liu01230    时间: 2015-5-16 14:52
丶浩浩丶 发表于 2015-5-15 22:44
NSObject和id都能指向任何对象

NSObject会做编译时检查(需要强制转换)

强制转换成什么类型的呢
作者: 13673696542    时间: 2015-5-16 16:31
丶浩浩丶 发表于 2015-5-15 22:44
NSObject和id都能指向任何对象

NSObject会做编译时检查(需要强制转换)

有学了点东西,看来光看视频还是不行呀!
作者: 一步一个脚印    时间: 2015-5-17 18:55
OC是门动态的语言,如果一个变量是id类型的话,就不会进行静态类型检查,可以调用任何方法,当然调用不恰当的方法运行时会报错。正是有了id类型所以OC的语言的动态性才那么强,它会强制对象和参数的实际类型在运行时确定,所以调用的方法当然也是运行时动态绑定的,有一点很重要,OC中方法都是运行时绑定的,不管一个对象是不是被赋值给id类型。
作者: 飞翔的猪    时间: 2015-5-18 13:52
涨姿势了,多学习,谢谢楼主的提问
作者: 天是蓝色的    时间: 2015-5-18 22:03
长知识了
作者: lyricdon    时间: 2015-5-18 22:17
追随自然 发表于 2015-5-15 23:39
学到东西!

一个需要强制转换,一个不用.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2