我正在开发一个应用程序。我正在执行一次搜索操作。 看我的搜索方法:
-(void)searchData
{
//[A release];
B =[A copy];
[A release];
NSLog(@"A retain count %i",[A retainCount]);
NSLog(@"B retain count %i",[B retainCount]);
C = [[NSMutableArray alloc]init];
[C removeAllObjects];
for (int i=0; i<[B count]; i++) {
DataBaseFields *data = [B objectAtIndex:i];
NSRange range= [data.DBtitle rangeOfString:searchEvents.text options:NSCaseInsensitiveSearch];
if (range.length>0) {
[C addObject:data];
}
}
NSLog(@"shouldChangeTextInRange text is %@",searchEvents.text);
A = [C copy];
NSLog(@"A retain count %i",[A retainCount]);
NSLog(@"C retain count %i",[C retainCount]);
[tableView1 reloadData];
}
在此代码A
中,B
,C
是三个NSMutableArrays。我没有分配内存,也没有为该数组写入属性。在此if搜索操作中显示任何数据,然后阵列A显示最后的retainCount
1.如果没有结果,则阵列A在最后32或46显示retainCount
。所以请告诉我如何解决这个。
答案 0 :(得分:4)
除了通常没有意义之外,您在此代码中看到奇数保留计数,因为作为实现细节,框架可能会在对象上调用retain / autorelease。由于保留计数并不反映对象被自动释放的次数,因此保留计数在您的代码中是无关紧要的。
另请注意,此处removeAllObjects
是不必要的。
C = [[NSMutableArray alloc]init];
[C removeAllObjects];
更好的是:由于您似乎对iOS开发相对较新,请启用ARC并完全完成所有这些保留/释放/自动释放调用。