【id类型和NSObject指针 ObjectIve-C中】

本文探讨Objective-C中的id和NSObject指针的异同。它们都是万能指针,能指向任意OC对象,但id在调用方法时无编译检查,可能引发运行时错误,而NSObject指针在调用非自身类方法时会触发编译警告。建议使用id作为万能指针,但需注意类型转换和运行时错误。
摘要由CSDN通过智能技术生成

前言

1)NSObject,是Objective-C中,所有类的基类。
2)根据里氏替换原则LSP,NSObject指针就可以指向任何类型的Objective-C对象。
3)所以,我们说NSObject指针,是一个万能指针。
例如:
NSObject *obj1 = [Person new];
NSObject *obj2 = [Student new];
NSObject *obj3 = @“jack”;
都是没有问题的。
但是,
NSString *str = [Person new];
就会被编译器给一个大警告,它说,你这个类型不一样!
4)所以,NSObject指针是1个万能指针,可以指向任意的OC对象。
5)但是,有一个问题:
如果,Person类中有一个sayHi()方法。
但是,你能不能通过obj1去调用这个sayHi()方法呢,答案是,不能!
因为,编译器认为obj1是NSObject类型的,NSObject类型里有sayHi()方法吗,没有,所以,编译器就认为不能调用!
那如果我非要调用呢,强转!
[(Person *)obj1 sayHi];
那这句话运行的时候,会不会出错,不会,因为obj1指向的对象里面,本来就有sayHi()方法吗!
如果要调obj2的study()方法呢,能直接调吗,也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值