id 和 instancetype
静态数据类型
默认情况下所有的数据类型都是静态数据类型
静态数据类型的特点:
1 在编译时就知道变量的类型
2 知道变量中有哪些属性和方法
3 在编译的时候就可以访问这些属性和方法
4 并且如果是通过静态数据类型定义变量,如果访问了不属于静态数据类型的属性和方法,那么编译器就会报错
动态数据类型
id 是一个动态数据类型
动态数据类型的特点
1 在编译的时候编译器并不知道变量的真实类型,只有在运行的时候才知道它的真实类型
2 并且如果通过动态数据类型定义变量,如果访问了不属于动态类型的属性和方法, 编译器不会报错
id
1 id == NSObject *万能指针
2 id 和 NSObject * 的区别
NSObject * 是一个静态数据类型
id 是一个动态数据类型
3 调用方法
通过静态数据类型定义变量,不能调用子类特有的方法
通过动态数据类型定义变量,可以调用子类特有的方法
通过动态数据类型定义的变量,可以调用私有方法
4 弊端 :由于动态数据类型可以调用任意方法, 所以有可能调用到不属于自己的方法, 而编译时又不会报错, 所以可能导致 运行时 的错误
5 应用场景:多态,可以减少代码量,避免调用子类特有的方法需要强制转换
6 判断:为了避免动态数据类型引发的运行时的错误,一般情况下如果使用动态数据类型定义一个变量,在调用这个对象的方法之前会进行一次判断,判断当前对象是否可以调用这个方法(即判断是否为定义类或者其子类)
instancetype
1 init 方法的返回值是 instancetype,将返回值赋值给一个其他的对象会报警号
2 instancetype == id == 万能指针 == 指向一个对象
3 注意:以后但凡是自定义构造方法,返回值尽量使用 instancetype ,不要使用 id
id 和 instancetype 的区别
1 id在编译的时候不能判断对象的真实类型
2 instancetype 在编译的时候可以判断对象的真实类型
3 id 可以用来定义变量,可以作为返回值,可以作为形参
4 instancetype 只能用于作为返回值
5 对于 init 方法,id 和 instancetype 是没有区别的,因为编译器会把 id 优化成 instancetype。当明确返回的类型就是当前 Class 时,使用 instancetype 能避免 id 带来的编译不出的错误情况
id 和 instancetype的更多相关文章
- 简述id,instancetype和__kindof的区别
id: 好处:可以调用任何对象方法 坏处:不能进行编译检查 + (id)person; instancetype 好处:自动识别当前类的对象 坏处:不会提示返回的类型 + (instancetype) ...
- id和instancetype的异同
相同点: 都可以作为方法返回值类型 在initWithName:方法中是一样的,例如: - (id)initWithName:(NSString *)name; - (instancetype)ini ...
- iOS开发中id、NSObject *、id、instancetype四者有什么区别?
在使用Objective-C语言进行iOS应用开发的时候,常常会涉及到id.NSObject *.id.instancetype这四个概念的使用,但这四者也是iOS初学者最易混淆的内容,下面小编看 ...
- Id vs Instancetype
我写了一篇 Id vs Instancetype的文章,欢迎访问!
- id 和 instancetype 方法的区别
首先明确 id 和 instancetype 都是万能指针,都能指向一个对象:(instancetype == id == 万能指针 == 指向一个对象) 主要区别亮点: 1. id 在编译时候不能判 ...
- 六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法
1. id和instancetype类型, id和instancetype类型区别: 1. id和instancetype都可以用来作为方法的返回值 2. id可以用来定义类型,instancetyp ...
- 1.import和include区别 2.NSLog 和printf区别 3.创建对象做的事情 4. 类和对象方法比较 5 匿名对象优缺点 6. 封装 7.作用域范围 8.id和instancetype 9.自定义构造方法规范 10.nil和Nil及NULL、NSNull区别
1.import和include的区别: import可以防止头文件的重复包含 2.NSLog 和printf的区别: 1,NSLog可以自动换行, 输出调试信息, printf不能. 2,NSLog ...
- 【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系
本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典 ...
- id NSObject instanceType 区别
id 当不确定数组元素类型时,可以选择使用id NSObject和id都可以指向任何对象 NSObject使用时必须强转 instantceType 只能返回和方法所在类相同类型的对象 返回值类 ...
随机推荐
- 基于线程池和连接池的Http请求
背景:最新项目需求调用http接口,所以打算使用最新的httpClient客户端写一个工具类,写好了以后在实际应用过程中遇到了一些问题,因为数据量还算 大,每次处理大概要处理600-700次请求,平均 ...
- [java基础]循环结构2
[java基础]循环结构2 写了几个循环结构练习~记录一下~~ 1:99乘法表 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:GameForFor.java 编写时间:2016 ...
- python核心编程第六章练习6-15
转换.(a)给出两个可识别格式的日期,比如MM/DD/YY或者DD/MM/YY格式.计算出两个日期之间的天数.(b)给出一个人的生日,计算此人从出生到现在的天数,包括所有的闰月.(c)还是上面的例子, ...
- spring-mvc.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Yii1.1.16的安装(windows)
下载yii1.1.16 http://pan.baidu.com/s/1mgyAOnI 解压后放到D盘,并重新命名为yii1.1.16,我是直接放在开发的目录下面 按"Window + R& ...
- JQuery在循环中绑定事件的问题详解
JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...
- 类库、委托、is as运算符、泛型集合
类库: 说白了,就是让别人调用你写的方法,并且不让别人看到你是怎么实现的. 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. 1.C#源代码 ...
- Linux有用命令
1.nohup命令 使用方法:nohup ./run.sh 作用:忽略所有挂断(SIGHUP)信号,不挂断地运行命令
- EXCEPT差集运算
EXCEPT差集运算在逻辑上先删除两个输入多集中的重复行,把多集变成集合,然后返回只在第一个集合中出现,在第二个集合中不出现的所有行.可以看下面示意图.
- easyui treegrid 分页
$(function () { $('#maintable').treegrid({ width: '98%', height: 550, nowrap: true, striped: true, f ...