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

来源:互联网 发布:淘宝联盟能赚多少钱 编辑:程序博客网 时间:2024/05/15 07:26

/* 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 = [YYPersonnew];

    

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

    [xiaoming setName:@"小明"];

    [xiaoming setAge:18];

    

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

    [xiaoming sayHi];


    return 0;

}

0 0
原创粉丝点击