您的位置:首页 > 其它

OC 类方法,对象方法,构造方法以及instancetype和id的异同

2016-05-10 17:02 369 查看

OC 类方法,对象方法,构造方法以及instancetype和id的异同

类方法:

类方法是可以直接使用类的引用,不需要实例化就可以直接使用的方法。一般写一些工具方法。

类方法:

声明和实现的时候,以(+)开头

类方法属于类的本身,只能通过类名调用

类方法不能直接访问成员变量

类方法不能直接调用对象方法(可以间接调用)

间接调用:

把对象当做形参传入

在类方法中创建一个对象

类方法的好处:

调用类方法的时候,不用创建对象,更节省内存,调用比较简单,效率高。

什么时候使用类方法?

当不需要访问成员变量的时候

对象方法:

声明和实现的时候,以(-)开头

对象方法隶属于对象,只能通过对象调用

对象方法可以直接访问成员变量

对象方法可以调用其他的对象方法以及类方法

实例化对象两种方法(建议使用第二种):

Person * p = [Person new];

//        new 类方法
//        1.开辟存储空间
//        2.初始化成员变量
//        3.返回指针
Person * p = [Person new];

Person * p = [[Person alloc] init];

//在堆中开辟存储空间 +alloc
Person * p1 = [Person alloc];
//初始化成员变量 -init
Person * p2 = [p1 init];

构造方法:

对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。

- (instancetype)init
{
self = [super init];//先继承再说
if (self) {

_age = 10;
_name  = "dahuan";

}
return self;
}

//用户自定义构造方法(对象方法)
- (instancetype)initWithName:(char *)name age:(int)age{

self = [super init];//先继承再说
if (self) {

_age = age;
_name  = name;
}
return self;
}

//用户自定义构造方法(类方法)
+ (instancetype)personWithName:(char *)name age:(int)age {

Person * p = [[Person alloc] initWithName:name age:age];
return p;
}

instancetype和id的异同:

1、相同点

都可以作为方法的返回类型

2、不同点

instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;

instancetype只能作为返回值,不能像id那样作为参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: