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那样作为参数。
相关文章推荐
- java中get方法,和set方法的使用实例
- 一个dtd文档的结构
- 百度整改,能否成为现代社会商业性过热现象的冷却剂?
- 若干个(大量)数字中找前K大/小的元素--数值型
- bzoj3173 最长上升自序列 块状链表
- Oracle-PL/SQL使用
- android学习之路 Handler用法
- 中间件测试的一些要点
- 内存池
- 使用第三方DOM解析XML格式文件
- 三、存储管理之无存储抽象
- jQuery的XX如何实现?——2.show与链式调用
- 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array
- Vsftp配置都没有问题 连接不上 530 Login incorrect 解决方法
- iOS中集成ijkplayer视频直播框架
- simpleui4matlab 四行代码搞定二值化调参
- POJ2186
- shell脚本显示颜色的设置
- Xtrabackup备份数据库
- java实现文件下载