2011-07-15 60 views
0

我得到釋放NSMutableArray在UIViewController中旋轉了起來,然後在ViewDidLoad它分配併入陣列,添加對象到它;然後當視圖關閉時:它的dealloc()釋放每個數組對象,然後釋放該數組。得到泄漏試圖釋放NSMutableArray

通常會產生泄漏。

我的基本結構:...

...m file: 

NSMutableArray* foo; 

@implementation .... 

viewDidLoad 
{ 
[[foo alloc] init]; 
... 
} 

dealloc 
{ 
    for i = each foo object: 
    [foo objectAtIndex: i] release]; 

    [foo release]; 
} 

...當你的數組中的項目正在retain版別處

+0

你真的需要爲循環釋放每運行的對象?我相信當數組本身被釋放時,一個'release'消息被髮送到數組中的每個項目。 –

+0

請添加實際的代碼。因此,您不需要釋放已添加到數組中的對象。 Array保留它們,並在釋放時釋放它們。 –

+0

@Deepak y你對我很失望 –

回答

1

在這種情況下,泄漏可能會導致。發送release消息到該項目將只會減少其保留計數,並不會實際釋放它。

1

當釋放一個NSMutableArray時,它處理釋放它的所有孩子。也是一樣的NSArray,的NSMutableDictionary,NSDictionary的,等等等等

嘗試建立富在你的頭一個實例變量,然後合成它:

...h file 
@interface MyObject : NSObject { 
    NSMutableArray* foo; 
} 

@property (nonatomic, retain) NSMutableArray *foo; 

...m file 
@implementation .... 
@synthesize foo; 

viewDidLoad 
{ 
    self.foo = [[NSMutableArray alloc] init]; 
    ... 
} 

dealloc 
{ 
    [foo release]; 
} 
+1

不知何故,我認爲他在做的事情幾乎完全一樣,這就是他必須得到泄漏的原因。 'self.foo = [[NSMutableArray alloc] init];'有2個保留,最後只發布一次。 –

+1

好點。可以嘗試在它周圍包裹autorelease ... – coryjacobsen