我跟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()
...
}
...
}
答案 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()
...
}
...
}