即使在ARC中,物体也可能泄漏?

时间:2012-11-05 10:49:32

标签: iphone ios ipad ios5

使用以下代码并使用ARC

NSString *text;
static NSString *CellIdentifier=@"Cell";
FeedsCell *cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell = [[FeedsCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier];
}

if (indexPath.row == [feedsData count]-1)
{
    [spinner startAnimating];
    [spinner setHidesWhenStopped:YES];

    OnDemand_fetch *getData = [[OnDemand_fetch alloc] init];

    if(nextUrl != NULL)
    {

        NSString *nextfbUrl = [getData getnextFbfeedUrl];
        NSString *nexturlEdited = [nextfbUrl stringByReplacingOccurrencesOfString:@"|" withString:@"%7C"];
        [demandfetch getFeedsInBackground:nexturlEdited];



    }
    else
    {
        [spinner stopAnimating];
        self.myTableView.tableFooterView=nil;
     }   

分析时,显示警告: “在第267行分配的对象的潜在泄漏并存储在'getData'中。”

有人可以建议避免这种方法吗?这会引起什么麻烦吗?

由于

2 个答案:

答案 0 :(得分:4)

  

没有错误!但我正在使用ARC!为什么这种奇怪的行为?

因为......你没有使用ARC。不知道为什么你以为你是。要转换为ARC,请转到编辑 - >重构 - >转换为Objective-C ARC。

How to convert to Objective-C ARC

如果您不想全力以赴,并且ARC所有内容,您可以将-fobjc-arc作为编译器标志添加到您要使用ARC的文件中,项目为非ARC。

答案 1 :(得分:0)

您只使用getData块中的if(nextUrl != NULL)对象,您可以尝试将其移动到块并最后将其设为nil,如下所示:

if(nextUrl != NULL)
{
    OnDemand_fetch *getData = [[OnDemand_fetch alloc] init];
    NSString *nextfbUrl = [getData getnextFbfeedUrl];
    NSString *nexturlEdited = [nextfbUrl stringByReplacingOccurrencesOfString:@"|" withString:@"%7C"];
    [demandfetch getFeedsInBackground:nexturlEdited];
    getData = nil;
}