[Cocoa]ObjC类方法简介
ObjC类方法简介
罗朝辉 (http://www.cnblogs.com/kesalin/)
一,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 而不是直接写类名,是为了应对子类继承这个函数然后被调用的情况。
+ (id) getInstance
{
id instance = [[[self class] alloc] init];
return [instance autorelease];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架