我对Objective C还不熟悉,但我还没能发现语言中是否有一个等价的静态构造函数,也就是一个类中的一个静态方法,它将在类的第一个实例被实例化之前被自动调用.还是我需要自己调用初始化代码?

谢谢

推荐答案

第一次使用类时,在使用任何类方法或创建实例之前,+initialize方法被称为automatically.你不应该自己打+initialize.

我还想告诉大家一个我学到的能让你一路咬下go 的小道消息:100 is inherited by subclasses, and is also called for each subclasses that doesn't implement an 100 of their own.如果在+initialize中天真地实现单例初始化,这可能会特别有问题.解决方案是判断类变量的类型,如下所示:

+ (void) initialize {
  if (self == [MyParentClass class]) {
    // Once-only initializion
  }
  // Initialization for this class and any subclasses
}

所有从NSObject派生的类都有+class-class个方法返回Class对象.因 for each 类只有一个类对象,所以我们确实想用==操作符测试相等性.您可以使用它来过滤应该只发生一次的内容,而不是针对给定类下面的层次 struct (可能还不存在)中的每个不同类过滤一次.

关于一个无关紧要的话题,如果你还没有学习过以下相关方法,那么值得学习:


Edit:查看@bbum的这篇文章,它解释了关于+initialize:http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/的更多信息

此外,迈克·阿什(Mike Ash)还写了一篇详细的周五问答;A关于+initialize+load方法:

Objective-c相关问答推荐

Objective-C:为什么[对象复制]的两个请求返回相同的结果?

协议与类别

iphone keys 串项目在应用程序卸载后仍然存在?

UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有什么区别?

如何将 NSMutableArray 中的字符串按字母顺序排序?

iOS 正确使用 @weakify(self) 和 @strongify(self)

NSManagedObjectContext performBlockAndWait:不在后台线程上执行?

反编译 Objective-C 库

如何测试推送通知在我的应用程序中是否有效

通过 ObjC 类别覆盖方法并调用默认实现?

在Objective-C中替换字符串中的多个字符?

Lipo错误!!无法打开输入文件

iOS 5:对 UIAppearance 感到好奇

如何在 Objective-C 中创建一个空白的透明 png?

Objective C 中的调用方法或发送消息

隐藏 NSTableView 标头?

Objective-C 中的属性和实例变量

通过点击状态栏滚动到 UITableView 的顶部

如何实现全局 iPhone 异常处理?

如何在 iOS 中创建自定义 UIActivity?