Objective-C中的id 类型

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

    

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值