什么可能导致 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()
...
}
...
}
我在 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()
...
}
...
}