我希望将MYFileObj存储到NSMutableArray(fileArray)并在UITavleView(tableview)上显示数据。
//----------------------------------MYFileObj
#import <UIKit/UIKit.h>
@interface MYFileObj : NSObject {
NSString *fileName;
}
-(void) setFileName:(NSString *)s ;
-(NSString *) fileName ;
@end
我要存储数据的数组
NSMutableArray *fileArray;
我创建了新对象并添加到fileArray
MYFileObj *newobj=[[MYFileObj alloc] init ];
NSString *ss=[[NSString alloc] initWithFormat:@"%@",path] ;
[newobj setFileName:ss];
[ss release];
[fileArray addObject:newobj];
[newobj release];
[atableview reloadData];
第一次使用relaodData并执行某些操作后,我想重新加载fileArray并重新绘制atableview。
//code to remove all object in atableview
if([fileArray count]>0)
{
[fileArray removeAllObjects];
[atableview reloadData];
}
我注意到有内存泄漏。 我希望知道方法“removeAllObjects”只删除MYFileObj本身,还是删除MYFileObj的成员属性“fileName”?
由于
InterDev中
答案 0 :(得分:2)
您没有说明您检测到内存泄漏的位置,但我会从发布的代码中假设您没有在MyFileObj的dealloc方法中释放fileName。
答案 1 :(得分:1)
一个好的做法是在setter中使用retain / release。这样可以避免不必要的对象创建/复制:
- (void)setFileName:(NSString *)s {
[s retain]; // <- Retain new value
[fileName release]; // <- Release old value
fileName = s;
}
- (NSString *)fileName {
return fileName;
}
- (void)dealloc {
[fileName release]; // <- Release the instance
[super dealloc];
}
答案 2 :(得分:0)
这取决于您在setFileName
课程中实施dealloc
和MyFileObj
的方式。您是否在release
向fileName
发送了dealloc
条消息?你在你的二传手中发送了retain
吗?