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. qml基础学习 Canvas画笔

    一.画布元素 自qt4.7发布qml以来,qml也在一直不断的完善中,在qt4时代使用qml时如果需要异形图,那我们只能让设计师来切图,这样的感觉是很不爽的,总感觉开发没有那么犀利.但是到了qt5这一 ...

  2. 两个dropDownList和一个GridView的选择与显示

    很久没有写ASP.NET了,今天有看到论坛上一个问题:"两个dropDownList和一个GridView,已经进行了数据绑定,现在想让第一个下拉菜单的数据改变时,第二个下拉菜单自动变到相应 ...

  3. Nancy 学习-视图引擎 继续跨平台

    前面一篇,讲解Nancy的基础,以及Nancy自宿主,现在开始学习视图引擎. Nancy 目前支持两种 一个是SSVE 一个是Razor.下面我们一起学习. The Super Simple View ...

  4. csharp: DBNull and DateTime

    /// <summary> /// /// </summary> /// <param name="dateTime"></param&g ...

  5. luogg_java学习_03_流程控制及循环结构

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 程序流程控制 顺序结构 分支结构:if-else,sw ...

  6. JAVA开发环境和IntelliJ工具安装

    在本地开发机中进行web项目的开发,部署到生产环境进行产品发布时,需要将web应用的文件打包成war包,War包可以放在Tomcat下的webapps或者word目录下,随着tomcat服务器的启动, ...

  7. linux下安装redis的详细过程

    先安装一些组件: yum -y install gcc gcc-c++ libstdc++-devel 下载并安装: # wget http://download.redis.io/releases/ ...

  8. Nginx详解-服务器集群

    Nginx是什么 代理服务器:一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,FQ神器.  一个完整的代理请求过程为:客户端首先 ...

  9. jQuery选择器。 5.21 《深夜还在编码的你》

    (之所以字体弄那么大是因为省眼,程序员不容易,程序员的眼睛更不容易,请保护我们的眼睛) 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器. 熟练地使用选 ...

  10. Elastislide - 响应式的图片循环展示效果

    Elastislide 是一款非常优秀的响应式 jQuery 图片循环展示(旋转木马)插件,集成了 Touchwipe 插件以支持触屏设备.提供了四种效果:水平图片传送带.垂直图片传送带.固定在屏幕底 ...