Object-C中NSObject指针和id指针的用法和区别

NSObject和id都属于万能指针,都可以指向任何对象。以下简单介绍一下不用用法和区别:

一、NSObject类型指针

由于NSObject是一切类的根类,因此,NSObject类没有其它创建对象的一些方法和属性,因此,编译器在编译时,NSObject类型指针指向的对象调用其对象方法和属性时会报错。可以用强转换来表明属于哪种类型,具体格式为:NSObject *obj = XXX; [(类名 *)obj 方法1];若“方法1”是obj对象的方法,则会执行该方法。

二、id类型指针

id可以指向任何OC对象,是通过typedef定义的类型,使用时不用加*。当使用id指针指向其它对象时,编译器会直接跳过不会检查。id类型指针对象可以调用方法,但是不可使用点语法(可以使用set get方法)。子类或者父类调用[self new],返回的是自己类型的对象,可以用id类型接收。但是id太灵活,没有限制容易出问题。因此,可以用instancetype作为返回类型。(instancetype类型只可以用作返回值使用)。id仅仅是纯地址,不包括类型,instancetype代表当前返回的对象的类型。

@implementation Person

-(void)sample{
    
    NSObject *name1 = self.name;
    id name = self.name;
 
}

@end

另外:如果判断该指针指向的对象是否拥有某方法,参考文章SEL方法说明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值