Object-c之id ,instancetype,SEL,_cmd;self,super几种类型的区别及用法
2015-11-18 16:12
706 查看
一 id 和instancetype
二 SEL,_cmd ,self和super
**SEL 用法实例对象寻找方法的过程
1>首先将方法包装成sel数据类型的数据 SEL *sel = @selector(方法名)
2>然后根据SEL找方法的地址
3>根据方法的地址调用相应的方法
4)注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用。
//SEL是一种数据类型,获取方法的地址
SEL s1 = @selector(run); //取出run的地址
[p2 performSelector:s1]; //间接的调用run
self、super是一个指针,self谁调用了当前方法,self就指向谁
而super指向了当前类的父类,如果super在类方法中,它就代表了调用当前类方法的类的父类,如果在对象方法中,它就代表调用当前对象方法的对象的父类对象
1>如果self、super在类方法中,那么它就代表当前调用这个类方法的类、父类
2>如果self在对象方法中,那么它就代表当前调用这个对象方法的对象、父对象
出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】
Self、super的用途:
(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)
(2)[self 方法名];可以调用其他的对象方法或者是类方法
“`
相同点: instanceType和id都是作为方法的返回类型而被使用。 不同点: 1.instancetype可以返回和方法所在类相同类型的对象,id返回的类型只能是未知类型的对象; 2.对于简易构造函数,用instancetype更好一点,因为编译器因此会知道返回的是什么类型的方法对象,而用id则不会,它只会返回未知类型的对象; 3.instancetype在错误检查机制上更优于id,由于instancetype能够在无关联返回类型中返回对象的类型,因此更利于开发者检测到无关联返回类型中的错误。而id返回的是未知类型,在无关联返回类型中检错时没有instancetype更易于检测错误。
二 SEL,_cmd ,self和super
SEL:全称Selector 表示方法的存储位置。 sel:是一种数据类型,存放方法的地址,在类对象的映射表里面存放着映射关系 _cmd:每个方法的内部都有一个-cmd,代表着当前方法。 super:指向了当前类的父类
Dog *g=[[Dog alloc] init]; [g test];
**SEL 用法实例对象寻找方法的过程
1>首先将方法包装成sel数据类型的数据 SEL *sel = @selector(方法名)
2>然后根据SEL找方法的地址
3>根据方法的地址调用相应的方法
4)注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用。
//SEL是一种数据类型,获取方法的地址
SEL s1 = @selector(run); //取出run的地址
[p2 performSelector:s1]; //间接的调用run
self、super是一个指针,self谁调用了当前方法,self就指向谁
而super指向了当前类的父类,如果super在类方法中,它就代表了调用当前类方法的类的父类,如果在对象方法中,它就代表调用当前对象方法的对象的父类对象
1>如果self、super在类方法中,那么它就代表当前调用这个类方法的类、父类
2>如果self在对象方法中,那么它就代表当前调用这个对象方法的对象、父对象
出现在对象方法中,就代表着当前对象,出现在类方法中,就代表着当前类】
Self、super的用途:
(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)
(2)[self 方法名];可以调用其他的对象方法或者是类方法
“`
相关文章推荐
- Objective-C 单例宏
- ObReferenceObjectByHandle例程
- javaSE之Object及hashcode等相关知识
- Objective-C 编码建议
- GitHub 上排名前 100 的 Objective-C 开源框架简介
- Objective-C学习-UITabBarController的介绍
- div显示在object、embed之上~(转)
- Objective-C 中声明指针变量时 星号( *)如何安放 居左or居右
- Objective-C基础之常用简单设计模式
- android中java和JS互相调用,Web Console: Uncaught TypeError: Object [object Object] has no method
- Objective-C 基础之强大的字面量
- [置顶] Java多线程编程模式实战指南(二):Immutable Object模式
- [置顶] Java多线程编程模式实战指南(一):Active Object模式(下)
- Python标准库:内置函数vars([object])
- 在Bundle中传递自定义的Arraylist<Object>
- JS Object和Function的区别
- ios开放--objectForKey与valueForKey在NSDictionary中的差异
- objective-c 中数据类型之一 几何数据类型(NSPoint,NSSize,NSRect)
- setValue和setObject的区别
- Objective-C中math.h数学计算公式介绍