2011-06-15 65 views
0

對於非指針變量,我必須在類的dealloc方法中調用release嗎?必須在dealloc中釋放非指針實例變量嗎?

例如

@interface myClass : NSObject { 

    BOOL isDirty; // do i have to release this? 
    NSInteger hoursSinceStart; // and this? 

    NSDate *myDate; // i will release the pointer in dealloc 
} 

@property (assign, nonatomic) NSInteger hoursSinceStart; // property to release? 

@property (assign, nonatomic) BOOL isDirty; // property to release? 
@end 
+0

不,這些值將保留在堆棧中,並在程序調用dealloc方法時彈出。 – fatih 2011-06-15 19:52:11

+1

@faith我懷疑dealloc與堆棧變量有什麼關係? – Tatvamasi 2011-06-15 20:04:07

回答

5

兩件事情:

  1. 你只需要保留和釋放對象。 BOOL和NSInteger不是對象,它們是基元。

  2. 您一般不應該叫release任何assign財產,因爲你沒有保留它 - 當然assign的是有道理的像NSIntegers或布爾值將原語的唯一類型,因爲你不能留住他們首先。

+0

謝謝!清晰直線! :) – gonzalesblanco 2011-06-18 21:57:37

0

您將全部發布擴展NSObject(或實現NSObject協議)的對象。
請閱讀http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html以更好地理解內存管理。

+0

嗯,從技術上來說,它是符合'NSObject' *協議*的任何對象,並且按照慣例(不是語言法則),這是每個類都有。 – 2011-06-15 19:54:24

+0

@Jonathan Grynspan你是對的。將編輯。 – Tatvamasi 2011-06-15 19:55:50

+0

它在問題中沒有提到,但是不要忘記在'-dealloc'中釋放()'手動的'malloc()''d內存。任何動態分配的內存,真的。 – 2011-06-15 20:03:56