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. mvc 对一个或者多个实体验证失败

    为了解决“对一个或者多个实体验证失败”,关闭调用SaveChanges() 的实体属性合法性验证(谨慎使用) db.Configuration.ValidateOnSaveEnabled = fals ...

  2. js和jquery常用方法

    1.0 编码 Encode,Decode function htmlEncode(value) { return $('<div>').text(value).html(); } func ...

  3. 参考例子,学习Func<T, TResult>委托

    这些天,开发ASP.NET MVC,其间有查找资料,发现一个全新的Func<T, TResult> 委托.让我们在开发时,节省与简化很多. 在开发过程中,我们需要把一个泛型List< ...

  4. Android去掉listView,gridView等系统自带阴影

    当我们使用listView的时候,拉到顶,或是拉到底部的时候,我们会发现有系统自带的阴影效果出现,不同手机出现的颜色可能还会不一样. 在以前我始终都有注意到此问题,一直以为是系统自带的,不能去掉.也没 ...

  5. MVC的路径查找顺序

    使用MVC的朋友们,知道MVC的funny之处. 但是如果出现路径找不到,请记住以下的页面路径寻找顺序. http://www.cnblogs.com/sosoft/ 首先,知道你的Controlle ...

  6. sql 内连接和外链接

    如表     -------------------------------------------------     table1 | table2 |     ----------------- ...

  7. js动态显示表格的汇总信息和详细信息

    我在做数据结果展示的时候,想要实现一个如下的功能:    用户可以选择一个时间段,默认显示这个时间段的汇总数据,当鼠标点击这个时间段的时候,将显示每个时间点的详细数据,再次点击的时候,详细数据收起,只 ...

  8. Entity Framework 6 执行Linq to Entities异常"p__linq__1 : String truncation: max=0, len=2, value='测试'"

    场景再现 我需要查询公司名称包含给定字符串的公司,于是我写了下面的测试小例子: var condition = "测试"; var query = from b in db.Com ...

  9. ios 根据文字数量计算UILabel高度(已修改)

    由于留言的朋友给出了更好的方法,所以下面的代码都是它留言中给出的,优于我前面计算Lable高度方法,这个可以说非常的准,是IOS自带的计算UILABEL高度的方式. 一.实现代码 // 创建label ...

  10. 深入浅出Java多线程

    Java给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别的形式,但多线程使用了 ...