黑马程序员技术交流社区

标题: OC基础笔记,【面试】id类型及应用场景 [打印本页]

作者: 丿白衬衫    时间: 2015-9-25 14:15
标题: OC基础笔记,【面试】id类型及应用场景
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];




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2