2010-06-24 68 views
0

我找到了別人編寫的代碼的一部分。奇怪的代碼在objective-c

@interface Fly : CCSprite 
{ 
id var1; 
id var2; 
} 

然後在.m文件

- (void) dealloc 
{ 
[var1 release]; 
[var2 release]; 

// don't forget to call "super dealloc" 
[super dealloc]; 
} 

這是寫對嗎?我不認爲id類型可以發佈。也許它是一個變量...你能解釋一下爲什麼這會被釋放嗎?或者你能幫我解釋爲什麼這是不好的?

回答

3

id可以容納任何對象,當你發送一條消息給它,它可能或可能沒有迴應。如果它確實響應release(Cocoa中的大多數類,因爲它們繼承NSObject),它將被釋放。根據正在運行的操作系統,如果對象不響應消息(iOS會拋出異常,OS X日誌並繼續),則可能會遇到異常,但可以在運行時使用respondsToSelector:進行檢查。

1

該id是一個動態類型,它可以引用任何對象。並且因爲它是一個對象,它可以被釋放和釋放。

0

該代碼看起來對我來說很合適。

id var1 

只是聲明瞭一個通用的對象變量。它可以釋放內存看到,因爲它只是一個對象

,然後這兩個變量從內存釋放過程中釋放