理解Objective C 中id
2024-08-31 05:46:52
什么是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
- 当需要创建一个Collection类或者方法,这些类或方法接收各种不同类型时,比如NSArray中即可以接收NSString,又可以NSObject,还可以NSProxy,就需要用id;
- 当需要把某些信息作为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
最新文章
- emoji表情 与 iconfont 一锅炖😂
- UIDatePicker和UIToolbar的使用
- C# DateTime转Json汇总
- 【GoLang】GoLang struct 使用
- 什么时候使用CountDownLatch
- celery简单应用
- IE7浏览器下CSS属性选择器二三事
- Discuz! 7.2 SQL注入exp
- Big Data Analytics for Security(Big Data Analytics for Security Intelligence)
- OutputCache祥解
- mac 上传本地代码到 Github 教程
- js 自动类型转换
- face alignment[Ordinary Procrustes Analysis]
- Win32程序框架
- Redux 和 React-Redux简介
- 清除eclipse,STS workspace历史记录
- js-权威指南学习笔记19
- js scrollIntoView 滚动到元素可视区域
- Introduction to Big Data with PySpark
- ant入门程序