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. 拓扑排序 --- hdu 4948 : Kingdom

    Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  2. 他答对一半(打一字)asp.net开源简答题项目

    先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://m.hovertree.com/miyu/bjae/4fpmm2td.htm 看你的答案是否正确. 这是ASP.N ...

  3. 了解WP的传感器

    之前看到老大的一个QQ签名,说想写一个WP的程序,可是后来,后来就没有后来了.我去年打算学一下WP程序开发的,一年了也无任何进展,我可不想后来,后来就没有后来.于是抽时间来接触一下.虽然都是用CShs ...

  4. C语言文件方式输入与输出(最简洁方便实用的一种方式)

    freopen("inputfile.txt", "r", stdin); freopen("outputfile.txt", " ...

  5. Gym 101102J---Divisible Numbers(反推技巧题)

    题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...

  6. SSH中的jar包讲解(1)

    我们在搭建SSH框架的时候,需要引入各自的一些jar包,相信很多初学者跟我一样,搜个资料,照搬过来(当然版本还得对应),至于为什么要引入这些个jar包,引入它们的作用是啥子,一头雾水,今天我就来跟这些 ...

  7. java注释规范

    前言:      现在java的出产地sun公司并没有定义一个java注释规范,注释规范目前是每个公司自己有自己的一套规范,主要是为了团队之间的协作. 1.基本规则      1.注释应该使代码更加清 ...

  8. canvas滤镜-刮刮乐

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. css知多少(4)——解读浏览器默认样式

    上一节<css知多少(3)——样式来源与层叠规则>介绍了样式的五种来源,咱们再通过一张图回顾一下. 对于上面的三层,咱们大概都比较熟悉了.下面的两层中,用户自定义样式一般也就是改一改字号大 ...

  10. 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器

    最近,我需要做一个非常基本的网页内容编辑功能.我不想使用 iframe ,我也不想要一个功能特别多的复杂编辑器,只需要很基本的内容编辑功能,例如粗体,斜体,列表,对齐等等. 您可能感兴趣的相关文章 分 ...