我運行了分配器和內存泄漏選項的分析器。 我發現與表格單元格相關的對象永遠不會被釋放。 通過進一步分析,我發現問題是由我在單元中存儲的自定義圖像引起的。 我更好地解釋:object-c中的對象分配/釋放不正確
我有擴展表格單元的對象:在.M類文件,並沒有別的只是簡單的@synthesize
@interface IP2TableViewCell : UITableViewCell
@property(nonatomic,weak) IBOutlet UIImageView *background;
@property(nonatomic,weak) IBOutlet UIImageView *thumbnail;
@property(nonatomic,weak) IBOutlet UILabel *cellTitle;
@property(nonatomic,weak) IBOutlet UILabel *cellDescr;
@end
。
然後我做了一個擴展UIImage的類,它有我使用的這個相關的initMethod。 我不得不說,自我= [超..]是一段代碼我不明白,我從視圖控制器的自動生成的代碼,這是如果(自己= [超級initWith ...)
-(ExtendedImage*)initWithPath:(NSString*)path andOptions:(NSDictionary*)opt {
self=[super initWithContensOfFile:path];
self.options=opt;
return self;
}
這是分配問題開始顯示的地方。 我有一個工廠,通過調用上面的init方法來構建圖像,然後將圖像添加到單元格中。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *obj = [fetchedResultsController objectAtIndexPath:indexPath];
IP2TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tableCell"];
cell.cellTitle.text=[obj objectForKey:@"cellTitle"];
NSDictionary *options = [NSDictionary dictionaryWithObject:indexPath forKey:@"indexPath"];
ExtendedImage *ei = [imageCache imageWithPath:@"/path/to/file" withOptions:options];
cell.thumbnail.image=ei;
return cell;
}
在探查它表明ExtendedImage長生不老,並永遠不會被釋放,並表的單元格就不會釋放。 如果在其他情況下,我做
cell.thumbnail.image=[UIImage imageWithContentsOfFile:@"/path/to/file"];
一切都表現很好,並且探查沒有顯示什麼特別錯了,和對象,細胞,得到正確釋放。
在這一點上,我有兩個簡單的問題。
- 爲什麼這不顯示爲泄漏?我的意思是,使用泄漏選項進行分析並不會將其顯示爲泄漏
- 我在做自定義映像時出錯了什麼?
感謝
如果沒有'ExtendedImage'代碼,沒辦法回答。 – 2012-02-27 10:24:58
ExtendedImage只有這個initMethod和一個@property(強)的選項,剩下的只是擴展UIImage。希望這對你來說已經足夠了。 – Leonardo 2012-02-27 13:45:28