2010-07-02 36 views
0

誰能告訴我[self.property release][property release]之間的區別。我問這是因爲在我的應用程序的視圖控制器之一,我在做[self.property release]和推這個視圖控制器在導航堆棧,當我彈出此視圖控制器它顯示錯誤EXC_BAD_INSTRUCTION,但當我做[property release]一切工作正常...?任何人都可以告訴我我哪裏出錯了。我是iPhone應用開發新手。[self.property release]和[property release]之間的區別

回答

3

[屬性版本]將釋放消息發送到屬性實例變量,幾乎可以肯定你想要做什麼。

[self.property release]將釋放消息發送給self.property返回的對象。這樣做的結果將取決於該屬性是否被定義爲assign/copy/retain,因此基本上,您可能會向您認爲的那個對象發佈不同的對象。

+0

感謝羅傑......爲您的答覆.. – user347161 2010-07-02 10:24:07

+2

我會挑戰這個答案:getter訪問器不返回對象的副本,但setter是誰創建副本。所以將發佈版本發送給getter訪問器意味着將版本發送給ivar是同樣的事情。我會稱這個答案不正確... – Moszi 2011-01-11 23:12:03

4

區別是self.myProperty是實例變量myProperty的訪問方法。通過@synthesize產生存取方法,或可作爲

-(Type*) myProperty; 
-(void) setMyProperty:(Type*)p; 

所以明確定義,假設你已經定義了訪問爲(關鍵是留住)

@property (retain) Type* myProperty; 

然後

[myProperty release]; 
myProperty = nil; 

相當於

self.myProperty = nil; 

一般來說,將釋放對象設置爲零是好習慣,這樣您就不會意外嘗試使用(或釋放)它們。

沒有很好的理由來呼籲[self.property release]

相關問題