什么是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))
#endifClass 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

转载于:https://www.cnblogs.com/whyandinside/p/3663169.html

理解Objective C 中id相关推荐

  1. css实例 css中id/class 详解样式表(外部样式表 内部样式表 内联样式 7种基础选择器 多重样式优先级 错误理解)[第一天]

    文章目录 css实例 css中的id css中的class 样式表 外部样式表 内部样式表 内联样式 7种基础选择器 多重样式优先级 错误理解 css实例 CSS 规则由两个主要的部分构成:选择器,以 ...

  2. 【转】在CSS中 ID与Class的区别?谢谢

    在样式表定义一个样式的时候,可以定义id也可以定义class.1.在CSS文件里书写时,ID加前缀"#":CLASS用"."2.id一个页面只可以使用一次:cl ...

  3. 如何理解Linux shell中的“2>1”(将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出))(尼玛>符号竟然不支持搜索,害我搜搜不到,只能搜)

    文章目录 前言 有何妙用 如何理解 总结 前言 有时候我们常看到类似这样的脚本调用: ./test.sh > log.txt 2>&1 这里的2>&1是什么意思?该如 ...

  4. 理解SQL SERVER中的分区表

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  5. python中id函数的用法_用id函数做几个测试

    Python内置的id函数其实非常简单,就是将参数对象的内存地址返回,即id函数返回的是一个很大的整数(地址).基于Python语言的特性,本文做了几个测试,还比较有趣. 相同整数的id相同 > ...

  6. 理解ASP.NET中的三层结构

    理解ASP.NET中的三层结构 我们用三层结构主要是使项目结构更清楚,分工更明确,有利于后期的维护和升级. 三层结构包含:表示层(USL),业务逻辑层(BLL),数据访问层(DAL) 1:数据访问层: ...

  7. html代码id,浅谈html中id和name的区别实例代码

    浅谈html中id和name的区别实例代码 更新时间:2008年07月28日 23:00:55   作者: 这个是form里面的name与id的区别 我们可以通过一段代码来分析一下其中的微妙差别: 在 ...

  8. 理解SQL SERVER中的分区表(转)

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  9. 深入理解 iOS 开发中的锁

    深入理解 iOS 开发中的锁 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知 ...

  10. BCD码的表示方法(没有单独的表示方法,只是用二进制表示,和十六进制更不同(有时候为方便暂且用十六进制形势,绝对不能理解为十六进制中特殊的一些数(无10以上的字母表示)))

    BCD码的表示方法 BCD码的表示方法(没有单独的表示方法,只是用二进制表示,和十六进制更不同(有时候为方便暂且用十六进制形势,绝对不能理解为十六进制中特殊的一些数(无10以上的字母表示))) BCD ...

最新文章

  1. Python数字类型及操作汇总(入门级)
  2. #include iostream与#include iostream.h的区别
  3. 解决SQL Server 2000 错误15023:当前数据库中已存在用户或角色
  4. 【PAT乙级】1009 说反话 (20 分)
  5. 【中间件】消息队列-RabbitMQ
  6. Java中的LongAdder和AtomicLong有什么区别?
  7. php v9 上传_phpcms v9 表单添加文件上传字段
  8. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
  9. strchr函数的用法
  10. 申通快递:1月快递服务业务收入25.65亿元 同比增长21.27%
  11. ionic打包中的那些坑
  12. Luogu P2664 树上游戏 dfs+树上统计
  13. 云计算 码率适配限速_5G 成熟后,带宽足够且云计算力够大,会不会对 PC 的升级需求放缓?...
  14. 兴趣爱好-常用的10种算法
  15. 西门子step7安装注册表删除_如何完全删除step 7
  16. C语言小知识——uthash使用
  17. 征途服务器维护时间,《征途》服务器重组几大怪现象
  18. SSM_JSON格式增删改查
  19. ReactNative连接android模拟器
  20. cloudflare免费证书_新Cloudflare:免费CDN+免费SSL证书轻松搞定https

热门文章

  1. java基础学习(9)堆和栈的区别详解
  2. 最新基于高德地图的android进阶开发(1)获取 Map API Key
  3. 计算机组成原理完整学习笔记(八):控制器设计
  4. 拥塞控制,图文并茂(挺丰富,借鉴较多大佬的思想)
  5. java注释符_Java程序中的单行注释符是(  ),多行注释符是( )。
  6. c 程序设计语言第一次作业,重大2017年C++程序设计语言第一次作业(含答案).doc...
  7. Eclipse 下载安装
  8. mybatis 使用 mssql 报错 不支持从 UNKNOWN 到 UNKNOWN 的转换
  9. 采购订单暂存和持有相关的问题?
  10. UML统一建模语UML2和EnterpriseArchitect