我有客观/快速的代码并排。我叫快速单身方法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(代码= EXC_i386_GPFLT)
'return Singleton.instance'
我不知道为什么会这样。我根本没有initSyncManager
中的代码,只有当我使用这段代码时才会发生此崩溃
[sharedData initSyncManager];
如果我没有调用该方法3次,则不会发生崩溃。
答案 0 :(得分:1)
你可以试试这个,因为我正在使用它(在Swift 2.1中)创建单例类,它对我来说很好用:
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
}
答案 1 :(得分:0)
我不认为您的单例语法正如您期望的那样工作,并且正在为每个实例创建一个新实例。每次实例化时,您都要调用static let instance = SharedData()
("给我一个新的共享数据实例")然后将其返回。
请改为尝试:
private let _SharedData = SharedData()
class SharedData {
class var instance: SharedData {
return _SharedData
}
}