有人可以告诉我为什么这个代码泄漏?仪器显示出几处泄漏,我无法弄清楚为什么,我经历了几次代码?为什么这个代码泄漏这么多?
基本上,第一种方法从属性列表初始化一堆缩略图类,然后构建一个用作tableviews数据源的数组。第二种方法更新时选择一个新的部分tableviews数据源:
这里是初始化和dealloc的电话:
NSMutableArray *thumbnailsDatasource;
NSMutableDictionary *sectionsDictionary;
@property (nonatomic, retain) NSMutableArray *thumbnailsDatasource;
@property (nonatomic, retain) NSMutableDictionary *sectionsDictionary;
@synthesize thumbnailsDatasource;
@synthesize sectionsDictionary;
[thumbnailsDatasource release], thumbnailsDatasource = nil;
[sectionsDictionary release], sectionsDictionary = nil;
而且这里有两种方法造成泄漏:
- (void)initThumbnails
{
// init sections dictionary
NSMutableDictionary *sectionsDict = [[NSMutableDictionary alloc] init];
// read the cover data from the plist
NSString *thePath = [[NSBundle mainBundle] pathForResource:kThumbnailPlistName ofType:@"plist"];
NSArray *thumbsArray = [[NSArray alloc] initWithContentsOfFile:thePath];
// iterate over the values in the dictionary
for (NSDictionary *currentThumb in thumbsArray)
{
Thumbnail *newThumb = [[Thumbnail alloc] initWithName:[currentThumb objectForKey:kThumbnailName]
fileURL:[currentThumb objectForKey:kThumbnailFileURL]
imageURL:[currentThumb objectForKey:kThumbnailImageURL]
section:[currentThumb objectForKey:kThumbnailSection]
pageNumber:[(NSNumber*)[currentThumb objectForKey:kThumbnailPageNumber] integerValue]];
// check if we already have an array in sectionsDictionary for that section
if ([sectionsDict objectForKey:newThumb.section])
{
NSMutableArray *currentSectionArray = [sectionsDict objectForKey:newThumb.section];
[currentSectionArray addObject:newThumb];
}
else
{
NSMutableArray *newSectionArray = [[NSMutableArray alloc] init];
[newSectionArray addObject:newThumb];
[sectionsDict setObject:newSectionArray forKey:newThumb.section];
[newSectionArray release], newSectionArray = nil;
}
[newThumb release], newThumb = nil;
}
[thumbsArray release], thumbsArray = nil;
self.sectionsDictionary = sectionsDict;
[sectionsDict release], sectionsDict = nil;
NSMutableArray *tempThumbsArray = [[NSMutableArray alloc] init];
// set datasource to All sections in dictionary
NSArray *allValuesArray = [self.sectionsDictionary allValues];
for (NSMutableArray *currentSection in allValuesArray)
{
[tempThumbsArray addObjectsFromArray:currentSection];
}
// sort array by pageNumber asc
[tempThumbsArray sortUsingSelector:@selector(comparePageNumberAsc:)];
self.thumbnailsDatasource = tempThumbsArray;
[tempThumbsArray release], tempThumbsArray = nil;
}
- (void)changeDatasourceToSection:(NSString*)section
{
if ([section isEqualToString:kAllSectionsName]) {
NSMutableArray *tempThumbsArray = [[NSMutableArray alloc] init];
// set datasource to All sections in dictionary
NSArray *allValuesArray = [self.sectionsDictionary allValues];
for (NSMutableArray *currentSection in allValuesArray)
{
[tempThumbsArray addObjectsFromArray:currentSection];
}
// sort array by pageNumber asc
[tempThumbsArray sortUsingSelector:@selector(comparePageNumberAsc:)];
self.thumbnailsDatasource = tempThumbsArray;
}
else {
NSMutableArray *newDatasource = (NSMutableArray*)[self.sectionsDictionary objectForKey:section];
[newDatasource sortUsingSelector:@selector(comparePageNumberAsc:)];
self.thumbnailsDatasource = newDatasource;
}
}
,你有一个viewDidUnload和一个dealloc? – 2011-04-01 18:37:41