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

类方法:

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

类方法:

  1. 声明和实现的时候,以(+)开头
  2. 类方法属于类的本身,只能通过类名调用
  3. 类方法不能直接访问成员变量
  4. 类方法不能直接调用对象方法(可以间接调用)

间接调用:

  1. 把对象当做形参传入
  2. 在类方法中创建一个对象

类方法的好处:

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

什么时候使用类方法?

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

对象方法:

  1. 声明和实现的时候,以(-)开头
  2. 对象方法隶属于对象,只能通过对象调用
  3. 对象方法可以直接访问成员变量
  4. 对象方法可以调用其他的对象方法以及类方法

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

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、不同点

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

  2. instancetype只能作为返回值,不能像id那样作为参数。

OC 类方法,对象方法,构造方法以及instancetype和id的异同的更多相关文章

  1. ios instancetype 和 id 的异同

    1.0 相同点:都可以作为方法的返回类型 2.0 不同点: a.instancetype 可以返回和方法所在类相同类型的对象   id 只能返回未知类型的对象 b. instancetype 只能作为 ...

  2. Objective-C学习笔记(十九)——对象方法和类方法的相互调用

    事实上在OC的对象方法(减号方法)和类方法(加号方法)并非相互独立的,它们也能够发生千丝万缕的关系,今天我们来研究下它们两者相互调用的问题.该样例还是以People类为基础. (一)对象方法调用类方法 ...

  3. 转载:Objective-C中的 instancetype 和 id 关键字

    Objective-C中的instancetype和id关键字 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994 ...

  4. Objective-C中的instancetype和id区别

    目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...

  5. (转)Objective-C中的instancetype和id区别

    有一个相同两个不同.相同 Written by Mattt Thompson on Dec 10th, Objective-C is a rapidly evolving language, in a ...

  6. 【转】Objective-C中的instancetype和id关键字

    原文:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5 ...

  7. instancetype和id的区别

    一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...

  8. Objective-C中的instancetype与id的区别

    一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...

  9. instancetype 和 id 的区别

    原文:http://blog.csdn.net/sirodeng/article/details/50516478 一.什么是instancetype instancetype是clang 3.5开始 ...

随机推荐

  1. Winform如何实现ComboBox模糊查询

    最近朋友问了一个关于Winform实现ComboBox模糊查询的知识点,自己好久没有搞Winform了,就上手练了一下,废话不多说,进入正题. 前台设计: 前台就是一个简单的Form窗体+一个Comb ...

  2. C#深入.NET平台的软件系统分层开发

    今天我们来讲讲分层开发,你从标题能不能简单的认识一下什么是分层呢? 不懂也没关系,接下来我来给你讲讲. 第一章 软件系统的分层开发 (1)其实分层模式可以这样定义:将解决方案中功能不同的模块分到不同的 ...

  3. Dapper小型ORM的使用(随便吐槽下公司)

    近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一 ...

  4. 【吐槽】IM群里几种我认为愚蠢的提问方式

    一.“有人吗?” 你能得到一句[在,请说]的答复我就服了你,这样问的结果往往是等半天没一个人鸟你,悲观的你或者就此凄凉的退群了,感概人情冷暖的同时甚至开始怀疑人生:积极的你或者这才意识到~要不干脆说问 ...

  5. 【C#进阶系列】21 托管堆和垃圾回收

    托管堆基础 一般创建一个对象就是通过调用IL指令newobj分配内存,然后初始化内存,也就是实例构造器时做这个事. 然后在使用完对象后,摧毁资源的状态以进行清理,然后由垃圾回收器来释放内存. 托管堆除 ...

  6. Tsung测试Tigase

    用两台主机坐Tigase的Tsung测试,其中1台运行Tigase,另1台运行Tsung. 1.Tigase服务器设置 tigase.conf: #osgiEnabled=(true|false) # ...

  7. 【Java每日一题】20161117

    package Nov2016; public class Ques1117 { public static void main(String[] args) { Sub sub = new Sub( ...

  8. mysql int(3)与int(11)的区别

    总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果i ...

  9. 说说这篇「我为什么从python转向go

    作者 CMGS2015.05.17 15:47* 写了7891字,被143人关注,获得了97个喜欢 说说这篇「我为什么从python转向go」 字数3748 阅读24227 评论21 喜欢81 恩看了 ...

  10. mysql对表操作的各种语句

    创建表 create table tb_user( id int(类型)primary key(设置为主键) auto_increment (设置id自增长), 每一个字段用逗号隔开, name va ...