OC-ID类型和instanceType区别

    /*id 被称为指向任何OC对象的指针,有点类似于Java中的Object对象*/
    

    /*声明了一个指正对象 指向了字符串 我们来看看能不能调用字符串方法*/
    id obj =  @"张三";
    
    //是可以的 因为在编译期间 编译器已经确定 obj指向的是一个字符串
    [obj stringByAppendingString:@"abc"];
    
    
    //我创建了个类初始化对象返回是ID
    NSString* isstring = [[Person alloc] initPerson];
    
    /*
        我们来看看调用方法 在编译的时候是可以调用 
        因为此对象返回是ID 我让字符串接受 骗过编译器以为真的是字符串 所以能调用
        不过在真正的运行的时候会报错! 因为他真正指向的是Person 因为Person没有这个方法
        所以挂了 OC是动态检测对象的真实类型;
    */
    [isstring stringByAppendingString:@"张三"];
    
    
    /*
        instancetype 只能修饰方法返回值 不能修变量 他去ID区别在那里?
        当其返回值为instanceType时,xcode则会报出警告.
        所以,建议写类的方法时,对于返回值,如果是id类型的话,尽量使用instanceType.
        看如下案例
    */
    
    //此时已经发出警告 编译已经发现 他需要的是一个Person指针 然而你赋值给字符串 所以抛出警告 new_person 初始化对象返回Instancetype
    NSString *isstrin1 = [[Person alloc] new_person];
    
    
    /*纯属个人理解 有不对的地方希望大家指出! */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章