Objective-C中的id 類型

來源:互聯網
上載者:User

        Objective-C 有種叫做id 的型別,它的運作有時候像是void*,不過它卻嚴格規定只能用在對象。Objective-C 與Java 跟C++ 不一樣,你在呼叫一個對象的method 時,並不需要知道這個對象的型別。當然這個method 一定要存在,這稱為Objective-C 的訊息傳遞。Objective-C這點的屬性類別似javascript。

        從這個意義看,id類型是Objective-C特有的引用對象泛型的一種手段。如下的demo:

-(id) init  {

    self = [super init];

    if(self) {

         [self setLevel: 10];

   }

   return self;

}

int main (int argc, const char * argv[])  {

      //這裡本質上init返回的是id的類型,然後賦值給obj* ,其實是做了一次類型轉換。

      obj* ob = [[obj alloc] init];

      id number;

       

      //賦值給id 類型,然後通過該id進行調用即可。

      number = ob;

      [number print];

    //下面的調用work well

    Rectangle *rec = [[Rectangle alloc] initWithWidth: 10 height: 20];
    Square *sq = [[Square alloc] initWithSize: 15];

    

     //但下面的會編譯失敗,注意Square 繼承了Rectangle,按照c++的則是ok的,但Objective-c這裡是不行,為了能夠支援這樣的文法,一個做法是Rectangle的建構函式

     //initWithWidth的傳回值不是Rectangle * 類型,而是改成id類型。

    Square *sq = [[Rectangle alloc] initWithWidth: 10 height: 20];

    

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.