2011-10-21 102 views
2

泄漏告訴我,下面是內存泄漏,但我不知道爲什麼。iOS的內存管理

TitledArray.h

@interface TitledArray : NSObject { 

NSMutableArray *realArray; 
BOOL uniqueTitles; 
BOOL uniqueIDs; 

} 

@property (nonatomic) BOOL uniqueTitles; 
@property (nonatomic) BOOL uniqueIDs; 
@property (nonatomic, retain) NSMutableArray *realArray; 

TitledArray.m

-(id)init { 
return [self initWithUniqueTitles:FALSE uniqueIDs:FALSE]; 
} 

-(id)initWithUniqueTitles:(BOOL)titles uniqueIDs:(BOOL)IDs { 

if (self = [super init]) { 
    //self.realArray = [[NSMutableArray alloc] init]; 
    self.realArray = [NSMutableArray array]; 
    self.uniqueTitles = titles; 
    self.uniqueIDs = IDs; 
} 
return self; 
} 

MissionLoading.h

@interface MissionLoading : TitledObject { 


TitledArray *storageWeights; 
TitledArray *passengerWeights; 

} 


@property (nonatomic, retain) FloatArray *storageWeights; 
@property (nonatomic, retain) FloatArray *passengerWeights; 

MissionLoading.m

@synthesize storageWeights; 
@synthesize passengerWeights; 


-(id)init { 
if (self = [super init]) { 


    self.storageWeights = [[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE]; 
    self.passengerWeights = [[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE]; 

} 

return self; 
} 

-(void)dealloc{ 

[storageWeights release]; 
[passengerWeights release]; 

[super dealloc]; 
} 

代碼:

for (int i = 0; i < recordCount; i++) 
{ 
    loading = [[MissionLoading alloc] init]; 

    // add to array 

    [loading release]; 
} 

根泄漏與self.realArray = [NSMutableArray的數組]的TitledArray對象;

我還是很新的iOS開發,但是這對我來說很好。任何想法都會有幫助。如果需要,我可以提供更多信息。

謝謝!

回答

2

當分配到具有在@property聲明retain的屬性,合成setter方法保留價值了,所以自動釋放您分配的財產,像這樣的事情:

-(id)init { 
    if (self = [super init]) { 
     self.storageWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease]; 
     self.passengerWeights = [[[TitledArray alloc] initWithUniqueTitles:FALSE uniqueIDs:TRUE] autorelease]; 
    } 
    // .... 
} 
+0

這就是問題所在,我可能從未想過這件事!謝謝你的幫助。 –

0

看起來你有//self.realArray = [[NSMutableArray裏的alloc] INIT];在init中。做一個乾淨的構建,然後再次運行這些工具。那個舊代碼可能因爲某種原因而在那裏,並且肯定會被標記爲泄漏。其他

一兩件事,把self.realArray = nil在TitledArray的dealloc

+0

我做了兩項建議,它仍然在說它正在泄漏:( –

+2

查看@ chown的回答 – logancautrell