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

时间:2015-03-16 17:25:23

标签: ios objective-c swift singleton

我有客观/快速的代码并排。我叫快速单身方法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次,则不会发生崩溃。

2 个答案:

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