前言
1)NSObject,是Objective-C中,所有类的基类。 2)根据里氏替换原则LSP,NSObject指针就可以指向任何类型的Objective-C对象。 3)所以,我们说NSObject指针,是一个万能指针。 例如: NSObject *obj1 = [Person new]; NSObject *obj2 = [Student new]; NSObject *obj3 = @“jack”; 都是没有问题的。 但是, NSString *str = [Person new]; 就会被编译器给一个大警告,它说,你这个类型不一样! 4)所以,NSObject指针是1个万能指针,可以指向任意的OC对象。 5)但是,有一个问题: 如果,Person类中有一个sayHi()方法。 但是,你能不能通过obj1去调用这个sayHi()方法呢,答案是,不能! 因为,编译器认为obj1是NSObject类型的,NSObject类型里有sayHi()方法吗,没有,所以,编译器就认为不能调用! 那如果我非要调用呢,强转! [(Person *)obj1 sayHi]; 那这句话运行的时候,会不会出错,不会,因为obj1指向的对象里面,本来就有sayHi()方法吗! 如果要调obj2的study()方法呢,能直接调吗,也