Objective c 这里的漏洞在哪里?
我不明白这里的漏洞在哪里 我正在查询数据库中的字段。在此之后,我将插入NSMutableArray列表Objective c 这里的漏洞在哪里?,objective-c,xcode,memory-leaks,Objective C,Xcode,Memory Leaks,我不明白这里的漏洞在哪里 我正在查询数据库中的字段。在此之后,我将插入NSMutableArray列表 @property (nonatomic, retain) NSMutableArray *bList; @property (nonatomic, retain) NSString *icon;//Model Model *newModel = [[Model alloc] init]; newModel.icon = [NSString stringWithUTF8String:(c
@property (nonatomic, retain) NSMutableArray *bList;
@property (nonatomic, retain) NSString *icon;//Model
Model *newModel = [[Model alloc] init];
newModel.icon = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 2)];
[self.bList addObject:newModel];
[newModel release];
最后:
- (void)dealloc {
[self.bList release];
[super dealloc];
}
不要那样做;使用self.bList=nil代码>或[bList release],bList=nil代码>
代码中似乎没有泄漏,除非我遗漏了一些明显的东西
请记住,leaks
标识泄漏的分配位置,而不是泄漏的位置。泄漏可能是由其他地方的过度滞留造成的
不要那样做;使用self.bList=nil代码>或[bList release],bList=nil代码>
代码中似乎没有泄漏,除非我遗漏了一些明显的东西
请记住,leaks
标识泄漏的分配位置,而不是泄漏的位置。泄漏可能是由于在其他位置保留过多。您创建了一个数组实例,但没有占用内存空间。为blist数组分配一个内存空间
self.blist= [[NSMutableArray alloc]init]; // or you can create like
self.blist= [[NSMutableArray alloc]initWithCapacity:100];
您创建了一个数组实例,但没有占用内存空间。为blist数组分配一个内存空间
self.blist= [[NSMutableArray alloc]init]; // or you can create like
self.blist= [[NSMutableArray alloc]initWithCapacity:100];
根据您对@murat
答案的评论,如果您正在这样做
self.blist = [[NSMutableArray alloc] init];
然后,当您在该行中两次取得所有权时,您正在泄漏内存。一个是基于alloc init
的,另一个是基于属性的(假设它是retain
ed,大多数情况下应该是这样)。在这种情况下,在dealloc
中释放它一次不会平衡retainrelease
调用。你将不得不这样做
self.blist = [NSMutableArray array];
或
根据您对@murat
答案的评论,如果您正在这样做
self.blist = [[NSMutableArray alloc] init];
然后,当您在该行中两次取得所有权时,您正在泄漏内存。一个是基于alloc init
的,另一个是基于属性的(假设它是retain
ed,大多数情况下应该是这样)。在这种情况下,在dealloc
中释放它一次不会平衡retainrelease
调用。你将不得不这样做
self.blist = [NSMutableArray array];
或
但在添加对象部分之前执行此操作,这样我就不会看到任何内存泄漏。可能不执行[self.blist release]在未发布[blist release]的情况下执行此操作阵列将根据需要进行扩展allocWithCapacity:
从来都不是必需的。但在添加对象部分之前执行此操作,这样我就不会看到任何内存泄漏。可能不执行[self.blist release]在未发布[blist release]的情况下执行此操作阵列将根据需要进行扩展<代码>允许容量:
从来都不是必需的。为什么不[self.bList release];?因为你最后会有一个悬空的指针。在这种情况下这真的不重要,但这是一种风格。为什么不[self.bList release];?因为你最后会有一个悬空的指针。在这种情况下这真的不重要,但这是一种时尚。不,还没有。到现在为止,我浪费了半天的时间去寻找一些东西……不,还没有。到现在为止,我已经浪费了半天的时间来寻找一些东西……在这种情况下,您发布的blist
超出了需要。在这里,您仅获得一次所有权,并且仅在dealloc
中放弃所有权。这将平衡内存管理调用。如果此移动出现问题,则您必须删除blist
上的其他释放调用。在这种情况下,您释放的blist
超出了需要。在这里,您仅获得一次所有权,并且仅在dealloc
中放弃所有权。这将平衡内存管理调用。如果此移动是一个问题,那么您必须删除blist
上的其他释放调用。