什么可能导致Swift sharedInstance返回EXC_BREAKPOINT

时间:2015-11-16 21:35:17

标签: ios exception swift2 xcode7

我跟sharedInstance return Static.instance!行发生了崩溃:

EXC_BREAKPOINT 0x0000000100da42d8

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

在iPad Air上使用iOS 8.4.0发生崩溃,使用Xcode 7.1.1中的Swift 2.1编译器编译构建

App本身(在启动时调用sharedInstance)和DataSource类位于不同的模块中。对于来自具有DataSource类的框架的类,静态结构是不同的吗?

@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()
        ...
    }
...
}

1 个答案:

答案 0 :(得分:1)

无论如何,静态单例都由GCD支持,因此这是推荐的语法

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

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