A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、用NSObject访问子类对象方法
        //需要强制转换,是静态类型
        NSObject* obj = cat;
        [(Cat*)obj run];
2、id类型
        id是动态类型,程序只有在运行时才能确定它的具体类型。是指向哪个对象的。
        id是一种通用的对象类型,它可以用来存储属于任何类的对象也可以理解为万能指针
        注意 在id的定义中,已经包好了*号。id指针只能指向os的对象。
        id 类型的定义
                Typedef struct objc object{
                    Class isa;
                } *id;       
        局限性:调用一个不存在的方法,编译器会马上报错。
        iOS5之后推出了instancetype类型
        instancetype和id的异同
                1) 相同点都可以作为方法的返回类型
                2) 不同点
                        1,instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
                        2,instancetype只能作为返回值,不能像id那样作为参数,
3、id类型应用场景
        //动物类
        Animal *animal = [Animal new]; //狗的类,狗继承自动物
        Dog *dog = [Dog new]; //猫的类,猫继承自动物
        Cat *cat = [Cat new]; //定义id类型
        id obj = cat; //id obj = dog;
        [obj run];

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马