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];
    
    
    /*純屬個人理解 有不對的地方希望大家指出! */

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