OC 类方法,对象方法,构造方法以及instancetype和id的异同
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那样作为参数。
OC 类方法,对象方法,构造方法以及instancetype和id的异同的更多相关文章
- ios instancetype 和 id 的异同
1.0 相同点:都可以作为方法的返回类型 2.0 不同点: a.instancetype 可以返回和方法所在类相同类型的对象 id 只能返回未知类型的对象 b. instancetype 只能作为 ...
- Objective-C学习笔记(十九)——对象方法和类方法的相互调用
事实上在OC的对象方法(减号方法)和类方法(加号方法)并非相互独立的,它们也能够发生千丝万缕的关系,今天我们来研究下它们两者相互调用的问题.该样例还是以People类为基础. (一)对象方法调用类方法 ...
- 转载:Objective-C中的 instancetype 和 id 关键字
Objective-C中的instancetype和id关键字 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/16994 ...
- Objective-C中的instancetype和id区别
目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...
- (转)Objective-C中的instancetype和id区别
有一个相同两个不同.相同 Written by Mattt Thompson on Dec 10th, Objective-C is a rapidly evolving language, in a ...
- 【转】Objective-C中的instancetype和id关键字
原文:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5 ...
- instancetype和id的区别
一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...
- Objective-C中的instancetype与id的区别
一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...
- instancetype 和 id 的区别
原文:http://blog.csdn.net/sirodeng/article/details/50516478 一.什么是instancetype instancetype是clang 3.5开始 ...
随机推荐
- C语言学习007:重定向标准输入和输出
先来完成一个将输入数据转换成json格式输出的小任务 #include <stdio.h> int main(){ float latitude; float longtitude; ]; ...
- 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出
数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...
- 使用Dom4j进行XML解析
1 概述 在进行ESB集成项目中,使用到了很多系统的接口,这些接口传输的数据大部分都采用了XML的格式,这样在使用ESB开发服务时就需要对XML数据进行解析或拼接的操作,本文以项目中流程服务为例,讲 ...
- 一道java算法题分析
最近在面试中遇到这样的一道算法题: 求100!的结果的各位数之和为多少? 如:5!=5*4*3*2*1=120,那么他们的和为1+2+0=3这道题不算难,不过倒是注意的细节也有 ...
- Win10怎么输入法切换
按 windows 键+空格键,或者CTRL+Shift,或者只按 Shift,或者CTRL+空格 试试 方法/步骤1在桌面上点击[控制面板],进入控制面板后使用分类显示控制面板内的选项.然后在语言下 ...
- Nancy 引用源码与NuGet安装差异
使用NuGet安装Nancy和直接引用源码项目存在一些差异,如序列化,授权验证问题. 如果引用源码的话,自定义JsonSerializer,如下: 注意,需要使用NuGet安装Newtonsoft.J ...
- 炉石传说 C# 开发笔记(BS上线尝试)
昨天买了一个月的1G 1核的服务器,由于不是新用户,所以没有享受到阿里的6个月免费的优惠. (阿里脑残,为什么不对于续费或者升级免费呢?) 在服务器的通讯上面已经OK了,完全绕过了ASP.NET,就是 ...
- SSH实例(2)
在WebContent\WEB-INF\下新建两个文件:applicationContext.xml和web.xml. web.xml: <?xml version="1.0" ...
- JWS ,JAX-WS ,JAX-RS,REST,Restlet,SOAP 相关概念
与 WebServices 相关的 J2EE 技术称为 JWS(Java WebServices),其中含有 JAX-WS.JAX-RS.JAXB.JAXR.SAAJ.StAX 等技术 支持 SOAP ...
- SQL内部拼接执行SQL语句时,实现变量参数化
exec sp_ExecuteSql执行的SQL语句拼接起是比较麻烦,如果关联的表多拼接过程是很容易出错的,下面这方法非常的好用,而且简单直观 if exists(select * from syso ...