Objective-C中的id 类型

来源:互联网 发布:视频素材软件 编辑:程序博客网 时间:2024/05/16 11:03

        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];

    

}


原创粉丝点击