/* 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;
}