Objective-c - 万能指针(id指针 / NSObject指针)

/* Objective-c - 万能指针(id指针 / NSObject指针)

 

 NSObject万能指针和id指针都是万能指针,他们都可以指向任意的OC对象.

 

 1> id指针

 

    id是一个typedef类型,id指针是一个万能指针,它可以指向任意的OC对象.

 

    当指针的类型是(NSObject *)类型,编译器在变异的时候会做编译检查.

    

    当指针的类型是id类型的时候,编译器不会做编译检查,直接通过.

 

    id指针的局限性,只能使用中括弧调用方法,不能使用点语法.

 

 

 2> NSObject万能指针

 

    里氏替换原则:

        父类的指针指向子类的对象,对程序没有任何的影响,这就是里氏替换原则.

 

    NSObject类是所有OC类的父类,根据里氏替换原则,NSObject指针可一直想任意的OC对象.

 

    NSObject指针指向子类对象的时候,如果要调用子类对象独有的方法,就必须做类型转换.

 

    NSObject指针是一个万能指针.

    当指针类型是(NSObject *)类型的时候,编译器要做编译检查.

 

    NSObject指针的局限性,只能使用中括弧调用方法,不能使用点语法.

 

 */

#import <Foundation/Foundation.h>


#pragma mark -

#pragma mark 人类的创建

//声明

@interface YYPerson : NSObject


@property NSString *name;

@property int age;


- (void)sayHi;


@end


//实现

@implementation YYPerson


- (void)sayHi

{

    NSLog(@"大家好!我叫%@,我今年%d岁了!", _name, _age);

}


@end


#pragma mark -

int main(int argc, const char * argv[]) {

    

    //创建人类对象

     id xiaoming = [YYPerson new];

    

    //赋值属性:当指针的类型是id类型的时候,编译器不会做编译检查,直接通过.

    [xiaoming setName:@"小明"];

    [xiaoming setAge:18];

    

    //调用方法:当指针的类型是id类型的时候,编译器不会做编译检查,直接通过.

    [xiaoming sayHi];


    return 0;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值