我希望删除UITablewView的所有行
UITableView是“atableview”,其数据源是“fileArray”。
NSMutableArray * fileArray;
fileArray是对象MYFileObj
的NSMutableArray#import <UIKit/UIKit.h>
NSMutableArray *fileArray;
@interface MYFileObj : NSObject {
NSString *fileName;
}
-(void) setFileName:(NSString *)s ;
-(NSString *) FileName ;
@end
我首先加载fileArray,然后调用[atableview reloadData];
做某事后,我希望重新加载fileArray并重绘atableview,所以我打电话-(void) removeACell:(NSInteger)row;
{
NSUInteger _lastSection = 0;//[self numberOfSectionsInTableView:atableview];
NSUInteger _lastRow =row;// [atableview numberOfRowsInSection:_lastSection] - 1;
NSUInteger _path[2] = {_lastSection, _lastRow};
NSIndexPath *_indexPath = [[NSIndexPath alloc] initWithIndexes:_path length:2];
NSArray *_indexPaths = [[NSArray alloc] initWithObjects:_indexPath, nil];
[_indexPath release];
[atableview deleteRowsAtIndexPaths:_indexPaths withRowAnimation: UITableViewRowAnimationNone];
[_indexPaths release];
}
-(void) reloadList;
{
if([fileArray count]>0) //----the begining of the codes cause memory leak
{ //I hope to remove all rows and reload fileArray
NSInteger n=fileArray.count;
[atableview beginUpdates];
for(int i=n-1;i>=0;i--)
{
[fileArray removeObjectAtIndex:i];
[self removeACell:i];
}
[fileArray release];
[atableview endUpdates];
} //----the end of the codes cause memory leak
//load fileArray again
[atableview reloadData];
}
但我发现这导致内存泄漏。
欢迎任何评论。
由于
InterDev中
答案 0 :(得分:1)
虽然有时您希望手动删除一行或多行,但您的代码似乎不是其中一种情况,因为您转而在桌面视图上调用reloadData。
当表中的内容发生变化时,首先对后备数据源进行更改 - fileArray - 然后调用reloadData,一切都会好的。
接下来,如果你完全清空它,你不必在循环中从数组中删除对象:只需使用[fileArray removeAllObjects]; (实际上,因为你在循环之后释放了fileArray,你可以将所有逻辑减少到[fileArray release];它会向每个对象发送一个版本。
不确定你的内存泄漏在哪里 - 我们看不到很多代码,但是如上所述清理逻辑会帮助你解决问题。