2010-08-30 64 views
2

我有一個創建爲NSObject的類。 這個類有許多不同類型的屬性和方法 等在iOS應用程序中發佈定製的NSObject類應用程序

當我在我的應用程序實例化這個類(比如在主視圖控制器)我 立即發送釋放呼叫,當我使用完。即:

MyObject *myObject = [[MyObject alloc] initWithParameters:parms]; 
[myObject doSomeMethodCall]; 
[myObject release]; 

所以我的問題是: 當我釋放myObject的,它會自動釋放所有聲明的對象,變量等 我在爲MyObject .h文件中聲明?

OR

我需要創建這將釋放所有的這些自定義的釋放方法?

請問因爲內存管理問題。

謝謝。

回答

5

您需要在對象中實現dealloc方法,並使用該方法釋放您擁有的任何資源。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW4

- (void)dealloc { 
    [mainSprocket release]; 
    [auxiliarySprocket release]; 
    [super dealloc]; 
} 

重要提示:你永遠不會調用dealloc方法的對象上,它是由當它的時間來清理運行時自動調用。

+0

這很好,但我有一個NSDictionary對象,當我在 - (void)dealloc調用中釋放它時,它崩潰了我的應用程序...我找不到原因.. – Zigglzworth 2010-08-30 15:33:30

+0

您是否在其他位置保留該字典? ? – kubi 2010-08-30 15:37:01

+0

不,但我將字典中的值分配給其他對象,如字符串。在我嘗試釋放NSDictionary之前,這些其他對象是無論如何發佈的,但它仍然會崩潰應用程序。另外,當我把[super dealloc]放入我的 - (void)dealloc方法時,它會崩潰我的應用程序。有趣的是,如果我沒有使用調試器運行它,它只會崩潰我的應用程序。如果我用調試器運行它並讓[super dealloc]調用它不會崩潰。奇怪.. – Zigglzworth 2010-08-30 16:21:07

0

最終,它會調用myObject上的dealloc方法。在myObject的dealloc方法中,您應該釋放myObject具有的所有實例變量。另外,請不要忘記[super dealloc]

0

我與Zigglzworth有同樣的問題,它是[super dealloc]調用的位置。我在我的-(void)dealloc方法開始時就使用了它,並且每次都會導致崩潰。在變量釋放語句之後將[super dealloc]移動到方法的末尾,現在它工作得很好。