iOS Swift:三次调用单例方法会导致应用程序崩溃

我有客观/迅速的代码并排。 我正在调用一个快速的单例方法3次。 三次后,崩溃。 我有理由相信这可能是一个记忆问题。 这是我的代码

ViewController.m

-(void)sharedData { // called three times sharedData = [SharedData sharedData]; [sharedData initSyncManager]; } 

Swift sharedData类

 class func sharedData() -> SharedData { struct Singleton { static let instance = SharedData() } return Singleton.instance } func initSyncManager() { } 

该行上的错误是EXC_BAD_ACCESS(code = EXC_i386_GPFLT)

 'return Singleton.instance' 

我不知道这是为什么发生。 我在initSyncManager中根本没有代码,只有当我使用这段代码时才会发生这种崩溃

 [sharedData initSyncManager]; 

如果我不调用这个方法3次,崩溃不会发生。

你可以试试这个,因为我正在使用这个(在Swift 2.1中)创build单例类,它对我来说工作的很好:

 class var sharedInstance: SharedData { struct Static { static var onceToken: dispatch_once_t = 0 static var instance: SharedData? = nil } dispatch_once(&Static.onceToken) { Static.instance = SharedData() } return Static.instance! } override init() { super.init() //initialisation } 

我不认为你的单例语法是像你期望的那样工作,并且正在为每个实例创build一个新的实例。 每一个实例,你调用static let instance = SharedData()共享数据static let instance = SharedData() (“给我一个共享数据的新实例”),然后返回它。

试试这个:

 private let _SharedData = SharedData() class SharedData { class var instance: SharedData { return _SharedData } }