Objective-c - NSObject万能指针

穆铭晨
2023-12-01

/*

 Objective-c - 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[]) {

    

    //创建人类对象

    YYPerson *xiaoming = [YYPerson new];

    

    //赋值属性

    xiaoming.name = @"小明";

    xiaoming.age = 18;

    //调用方法

    [xiaoming sayHi];

    

    

    //创建人类对象(父类指针指向子类对象)

    NSObject *xiaohua = [YYPerson new];

    [(YYPerson *)xiaohua setName:@"小花"];//NSObject指针的局限性,只能使用中括弧调用方法,不能使用点语法.

    [(YYPerson *)xiaohua setAge:20];

    

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

    [(YYPerson *)xiaohua sayHi];

   

    return 0;

}



 类似资料: