Cocoa中的单身人士和记忆管理

时间:2011-04-02 19:57:02

标签: cocoa memory-management singleton static-members

我有一个单例作为类方法:

+(WordsModel *) defaultModel{
    static WordsModel *model = nil;  

    if (!model) {
        model =  [[[self alloc] init] autorelease];
    }

    return model;
}

方法内的模型静态引用会发生什么?会不会被释放?

2 个答案:

答案 0 :(得分:3)

它不仅会被释放(因为你发送了-autorelease消息),你下次尝试使用它可能会导致崩溃,因为model指针未被设置为nil对象被释放了。因此,它将指向内存,或者是垃圾,或者(如果该内存已被重用)与不同于预期的对象。

答案 1 :(得分:1)

它将无法正常运行,因为您正在自动释放您的班级实例......

在下一个runloop中,它将被释放......

看看标准的单身人士模式: http://www.cocoadev.com/index.pl?SingletonDesignPattern

静态实例应该是一个全局变量,当你的应用程序退出时将被释放...