2011-10-21 101 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