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 } }