我正在寻找类似于Objective-C的+(void)initialize类方法的行为,因为该方法在类初始化时调用一次,此后再也不会调用.

一个简单的class init () {}在一个class关闭将真的很光滑!显然,当我们在 struct 闭包中使用"class vars"而不是"static vars"时,这一切都会非常匹配!

推荐答案

如果您有一个Objective-C类,最简单的方法就是覆盖+initialize.但是,确保您的类中的subclasses个也重写+initialize,否则您的类的+initialize可能会被多次调用!如果您愿意,您可以使用dispatch_once()(如下所述)来防范多个呼叫.

class MyView : UIView {
  override class func initialize () {
    // Do stuff
  }
}

 

如果你有一个SWIFT类,你能得到的最高值是init()语句中的dispatch_once().

private var once = dispatch_once_t()

class MyObject {
  init () {
    dispatch_once(&once) {
      // Do stuff
    }
  }
}

此解决方案不同于+initialize(在第一次发送Objective-C类消息时调用),因此不是问题的真实答案.但是已经足够好了,国际海事组织.

Ios相关问答推荐

如何在将EXPO更新到50.0后修复react 本机错误

无法在所有窗口上方显示图像

使用AVCaptureEventInteraction捕获音量按键快门

从包含 5 个以上项目的自定义选项卡栏的导航视图中删除更多按钮

当虚拟对象附加到其网格时,如何刷新创建 ARView 的 SwiftUI UIViewRepresentable?

如何将 Info.plist 文件添加到 Xcode for admob,错误 添加后会产生多个命令

由于缺少 libarclite_iphonesimulator.a 文件,将 XCode 升级到 14.3 后无法在模拟器上运行 Flutter 应用程序

Flutter 构建 ios 失败:运行 pod 安装时出错

clipShape swift的三元

通过隐藏和显示视图在 iMessage 应用程序中使用不同的视图

将视图(例如 Text())不透明度设置为 0 或将背景设置为 Color.clear 会导致它不被绘制

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

iOS 中的 [Class new] 和 [[Class alloc] init] 有什么区别?

如何使用 sendAsynchronousRequest:queue:completionHandler:

直接下载Xcode模拟器

标题为 UIImage 的导航栏

@IBDesignable 崩溃代理

SLComposeViewController 分享教程

如何在 Objective-C 中组合两个数组?

在两个或多个 iPhone 应用程序之间共享数据