复制数组后,retaincount将会增加

时间:2012-01-31 08:00:08

标签: iphone memory-management

我正在开发一个应用程序。我正在执行一次搜索操作。 看我的搜索方法:

-(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中,BC是三个NSMutableArrays。我没有分配内存,也没有为该数组写入属性。在此if搜索操作中显示任何数据,然后阵列A显示最后的retainCount 1.如果没有结果,则阵列A在最后32或46显示retainCount。所以请告诉我如何解决这个。

1 个答案:

答案 0 :(得分:4)

retainCount没用。不要打电话。

除了通常没有意义之外,您在此代码中看到奇数保留计数,因为作为实现细节,框架可能会在对象上调用retain / autorelease。由于保留计数并不反映对象被自动释放的次数,因此保留计数在您的代码中是无关紧要的。

另请注意,此处removeAllObjects是不必要的。

C = [[NSMutableArray alloc]init];
[C removeAllObjects];

更好的是:由于您似乎对iOS开发相对较新,请启用ARC并完全完成所有这些保留/释放/自动释放调用。