黑马程序员技术交流社区

标题: Objective C 类方法 [打印本页]

作者: 德玛西亚皇子    时间: 2015-9-19 23:53
标题: Objective C 类方法
一,Objective C  的类方法(class method),即 static 方法,是用 + 修饰的方法。类方法是属于类对象的,所以无需创建类的实例对象我们就可以直接使用它们。使用形式为:
[ClassName classMethod];

在这里 ClassName 代表的就是一个类对象,而不是作为一种类型。类名只有出现在接收消息的表达式中才代表一个类对象,其他情况下都表示一种类型。

二,类方法可以继承自基类,就像普通的类成员方法一样。有一个特别的类方法 + (void) initialize,在类接收到任何消息之前,运行时系统会向类对象发送这个消息,因此我们可以在这个函数里对类对象做一些初始化,比如初始化 static 变量等等。在 NSObject 中,该方法什么也不做。

三,当类对象接收到一个消息却没有相应的类方法响应时,运行时系统会去检查是否存在一个 root (通常是 NSObject)的实例方法能够响应,如果能够响应就会执行 root 的成员方法来响应。只有在这种情况下,类对象才能够执行实例方法!再次声明类对象执行实例方法的条件:

1,类对象没有相应的类方法来响应某个发送至它的消息;
2,root 类定义了能够响应这个消息的实例方法。

四,类方法的返回值类型默认为 id,也能接受不定参数,这些都与实例方法是一致的。例如:

+ makeGroup:group, ...;

五,在类方法中使用 self 和 super,这时 self 和 super 指代的都是类对象,而非实例对象,这一点要特别注意。推荐的工厂方法写法如下,在这里使用 self class 而不是直接写类名,是为了应对子类调用该函数的情况。








1

2

3

4

5



+ (id) getInstance

{

    id instance = [[[self class] alloc] init];

    return [instance autorelease];

}

作者: 木子青    时间: 2015-9-20 20:31
赞  赞 赞
作者: wangganghua    时间: 2015-9-20 22:02
总结的不错!!!
作者: 摆摆    时间: 2015-9-21 10:04
点赞!!!!
作者: RIDP    时间: 2015-9-21 12:18
呃。除了中间的1,2,3,4,5没看明白是干啥用的,其他的都不错啊!
作者: wqp123000    时间: 2015-9-21 12:25
还没有看到




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2