OC中id和void*的区别

id和void *并非完全一样。

void *是C语言中常用的。

id类型用于隐藏对象类型的类名部分,相当于C语言中的“void *”。但是id本身就是一个指针,而且可以指向任何一个继承了Object(或者NSObject)类的对象。所以需要注意的是:id是一个指针,所以你在使用id的时候不需要加星号。比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。

比如id person和void* personV,[person print]是可以的,但是[personV print]在编译的时候就会报错。因为ObjeciveC的编译器看到id,会假定它可以接受任何message,虽然在runtime时可能并不是这样的,但personV并不是Objective C类型,编译器就会报错,但是void *有可能是可以接收print message的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,789评论 0 9
  • 秋阳杲杲121阅读 247评论 0 1
  • 亲爱的,不得不告诉你,我病了; 苍白的诊室,我独自行走在病人与陪护人之间。 看她们戴着疲惫的面具,我甚至不确定对方...
    流浪山狼阅读 190评论 0 0
  • CSS3的border-radius属性,最常见的也许是被用来画圆形,方法是设置一个正方形div之后,给它的bor...
    Mike_Gu阅读 612评论 0 0
  • 树影斑驳,风吹沙沙。 一人一椅一书。
    生如秋叶O阅读 301评论 0 0