2013-03-07 42 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