什么是id,与void *的区别

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

/**
* Type for Objective-C objects.
*/
typedef struct objc_object
{
/**
* Pointer to this object's class. Accessing this directly is STRONGLY
* discouraged. You are recommended to use object_getClass() instead.
*/
#ifndef __OBJC_RUNTIME_INTERNAL__
__attribute__((deprecated))
#endif
Class isa;
} *id;

id 与 NSObject *的区别

id与instanceType

什么时候应该用id

  1. 当需要创建一个Collection类或者方法,这些类或方法接收各种不同类型时,比如NSArray中即可以接收NSString,又可以NSObject,还可以NSProxy,就需要用id;
  2. 当需要把某些信息作为context或者token 对象传出给public API使用,而caller不能改变所传出的对象时,就可以使用id作为类型;

init 方法的实现

convience constructor

http://tewha.net/2013/02/why-you-should-use-instancetype-instead-of-id/

http://stackoverflow.com/questions/7903954/why-use-id-when-we-can-just-use-nsobject

最新文章

  1. emoji表情 与 iconfont 一锅炖😂
  2. UIDatePicker和UIToolbar的使用
  3. C# DateTime转Json汇总
  4. 【GoLang】GoLang struct 使用
  5. 什么时候使用CountDownLatch
  6. celery简单应用
  7. IE7浏览器下CSS属性选择器二三事
  8. Discuz! 7.2 SQL注入exp
  9. Big Data Analytics for Security(Big Data Analytics for Security Intelligence)
  10. OutputCache祥解
  11. mac 上传本地代码到 Github 教程
  12. js 自动类型转换
  13. face alignment[Ordinary Procrustes Analysis]
  14. Win32程序框架
  15. Redux 和 React-Redux简介
  16. 清除eclipse,STS workspace历史记录
  17. js-权威指南学习笔记19
  18. js scrollIntoView 滚动到元素可视区域
  19. Introduction to Big Data with PySpark
  20. ant入门程序

热门文章

  1. VB6 GDI+ 入门教程[6] 图片
  2. Loadrunner基础:Loadrunner Vuser基本概念和应用
  3. Linux基础: 挂载镜像文件(Mount & ISO)
  4. hdu 3853LOOPS (概率DP)
  5. ARM字节对齐问题详解
  6. form程序的界面修改
  7. Wilcoxon test
  8. 实验一 Java开发环境的熟悉境的熟悉
  9. TokuDB介绍——本质是分形树(一个叶子4MB)+缓存减少写操作
  10. java并发带返回结果的批量任务执行