【问题标题】:retaincount will be increased after copy an array复制数组后retaincount会增加
【发布时间】:2012-01-31 08:00:07
【问题描述】:

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

-(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。我没有分配内存,也没有为该数组编写属性。在此,如果搜索操作显示任何数据,则数组 A 在最后 1 显示 retainCount。如果没有结果,则数组 A 在最后 32 或 46 显示 retainCount。所以请告诉我如何解决这个问题。

【问题讨论】:

标签: iphone memory-management


【解决方案1】:

retainCount 没用。不要调用它。

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

还要注意这里的removeAllObjects 是不必要的。

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

更好的是:由于您似乎对 iOS 开发比较陌生,请打开 ARC 并完全完成所有保留/释放/自动释放调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2016-12-23
    相关资源
    最近更新 更多