Object-c之id ,instancetype,SEL,_cmd;self,super几种类型的区别及用法

转载 2015年11月18日 16:12:33

一 id 和instancetype

相同点:
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 方法名];可以调用其他的对象方法或者是类方法
“`

Object-c之id ,instancetype,SEL,_cmd;self,super几种类型的区别及用法

一 id 和instancetype相同点: instanceType和id都是作为方法的返回类型而被使用。 不同点: 1.instancetype可以返回和方法所在类相同类型的对象,id返回的...

object-c里self与super的区别

self与super的区别(转) 在objc中的类实现中经常看到这两个关键字”self”和”super”,以以前oop语言的经验,拿c++为例,self相当于this,super相当于调用父类的方法...

Object-C self = [super init]

 What does it mean when you assign [super init] to self? Apr 19, 2009 by Matt Gallagher Tags: ...
  • doitsjz
  • doitsjz
  • 2016年02月17日 22:33
  • 250

黑马程序员-Object-C封装,和对象.类方法,self关键字的用法总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一.封装 (encapsulation) 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序...

Objective-C学习之description、 SEL、类本质、self和super用法

一:description方法description有对象方法和类方法两种,(是NSObject类的方法) 1,-description(对象方法)使用NSLog和@%输出某个对象时,会调用对象的d...
  • yxys01
  • yxys01
  • 2016年02月23日 09:51
  • 318

41-知识补充(UIPickerView的补充方法,使用self创建对象的好处,id和instancetype区别,KVC底层代码实现,文本框的两个代理方法)

知识补充(UIPickerView的补充方法,使用self创建对象的好处,id和instancetype区别,KVC底层代码实现,文本框的两个代理方法) 1.PickerView的几种选中 ...

instancetype和id类型区别

苹果在iOS 8中全面使用instancetype代替id Steven Fisher:只要一个类返回自身的实例,用instancetype就有好处。 @interface Foo:NSObject ...
  • hherima
  • hherima
  • 2015年03月03日 23:32
  • 922

instancetype和id类型的区别和用处

今天研究代码的时候,发现居然返回 instancetype 类型,很惊讶自己学识浅显。                Clang的文档里提到instancetype is a contextua...
  • wxs0124
  • wxs0124
  • 2014年11月12日 09:08
  • 524

IOS开发基础Object-C(05)—OC变量的作用域、self

一、变量的作用域方法的声明和实现,都必须以+ 或者 - 开头, (1). +表示类方法(静态方法) (2).-表示对象方法(动态方法) 在.h中声明的所有方法都...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Object-c之id ,instancetype,SEL,_cmd;self,super几种类型的区别及用法
举报原因:
原因补充:

(最多只允许输入30个字)