有人可以告訴我爲什麼這個代碼泄漏?儀器顯示出幾處泄漏,我無法弄清楚爲什麼,我經歷了幾次代碼?爲什麼這個代碼泄漏這麼多?
基本上,第一種方法從屬性列表初始化一堆縮略圖類,然後構建一個用作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