2010-07-10 92 views
-2

我追問是靜態對象內存釋放

-(ABC*)createInstance 
{ 
    Static ABC *obj = [[alloc ABC] init]; 

    if(obj == nil) 
    { 
    obj = [[alloc ABC] init]; 
    } 
    return obj 
} 

,才能在客觀C寫的

[[ABC createInstance] release] 
+1

您的代碼是沒有意義的,並不會編譯。 – 2010-07-10 09:20:07

+0

你試圖用代碼實現什麼? – 2010-07-10 11:58:32

回答

2

是的,如果你還沒有覆蓋retain/release用戶可以發佈您的實例。看看common singleton patterns更好的方法。

注:

  • 這是[ClassName alloc],不[alloc ClassName]
  • 如果你的意思是讓createInstance類方法使用+ (ABC*)createInstance;
  • 這是static,不Static
  • 您必須初始化objnil
  • 使用self,而不是ABC如果子類是一個問題:[self alloc]
  • 共同的名字,這些方法是sharedInstance
+0

我想補充: 1.你必須**用零來初始化靜態存儲變量(非原語不起作用)。 2.你應該使用'self'而不是'ABC'來分配(用於子類化)。 3.訪問者應該被命名爲'sharedInstance'(公共objc樣式)。 – 2010-07-10 09:32:22

+0

@Nik:很好的補充,但是1.僅適用於文件範圍變量。 – 2010-07-10 09:39:25

+0

1.哦,好,我沒有意識到這種差異。 2.它應該是'[self alloc]',因爲它是一個類方法(當然)。 – 2010-07-10 09:45:55