什么可能导致 Swift sharedInstance return 上的 EXC_BREAKPOINT

What could cause EXC_BREAKPOINT on Swift sharedInstance return

我在 sharedInstance return Static.instance! 行发生以下崩溃:

EXC_BREAKPOINT 0x0000000100da42d8

在没有调试断点的 Ad Hoc 发布版本中发生崩溃。 根据崩溃的调用堆栈 sharedInstance 应该在崩溃时已经存在(它首先在应用程序启动时调用,崩溃发生在按钮点击时)。

使用 iOS 8.4.0 在 iPad Air 2 上发生崩溃,构建是在 Xcode 7.1.1

中使用 Swift 2.1 编译器编译的

App 本身(在启动时调用 sharedInstance)和 DataSource class 位于不同的模块中。可能是来自框架的 classes 和 DataSource class 静态结构不同吗?

@objc public final class DataSource : NSObject
{        
    public class var sharedInstance: DataSource
    {
        struct Static
        {
            static var instance: DataSource?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token)
            {() -> Void in
                Static.instance = DataSource()
            }
        return Static.instance!
    }

    override init()
    {
        super.init()
        ...
    }
...
}

GCD 支持静态单例,所以这是推荐的语法

@objc public final class DataSource : NSObject
{
  class var sharedInstance : DataSource {
    struct Static {
      static let sharedInstance = DataSource()
    }
    return Static.sharedInstance
  }

  override init()
  {
    super.init()
    ...
  }
  ...
}