2013-03-07 46 views
0

我想在应用程序中保留一个对象,并且不要释放。已解决:如何使ARC模式保持单个对象?

@implementation MyClass 

    static MyClass *sharedInstance = nil; 
    + (MyClass *)sharedInstance { 
     if (!sharedInstance) { 
      sharedInstance = [[super alloc] init]; 
     } 
     return sharedInstance; 
    } 
@end 

我可以通过[MyClass sharedInstance]获得单个对象,它在非ARC模式下工作良好。

但是当更改为ARC模式时,该对象将会释放。

+2

这里写的代码是正确的,如果不是线程安全的话。如果对象被释放,问题就在别处。 – Chuck 2013-03-07 07:20:52

+0

在AppDelegate中创建一个MyClass对象。 – 2013-03-07 07:21:11

+1

你为什么要调用'[super alloc]'?它应该是'[self alloc]'或'[MyClass alloc]'。另外,为什么'MyClass'类型的'sharedInstance'静态变量和'sharedInstance'类方法'Ap'的返回类型?他们需要是一样的。 – rmaddy 2013-03-07 07:34:59

回答

3

为什么你认为它会释放?您已将其分配给由ARC跟踪的静态变量。

+0

谢谢你们一切! – why 2013-03-07 07:37:45

+0

原因不是变量被声明为“静态”,而是其存储时间是静态的,与所有文件作用域变量相同。在这种情况下,“静态”只意味着内部连接。 – 2013-03-07 07:45:00

+0

@NikolaiRuhe:感谢您的澄清;编辑。 – nneonneo 2013-03-07 07:47:53