泄漏和如何处理它

时间:2014-11-25 20:30:06

标签: ios core-data memory-leaks

根据仪器,以下有泄漏,我不明白为什么。任何人都可以协助吗?任何帮助赞赏。谢谢。

- (User *) findUser:(NSString *)userName
{
    NSFetchRequest *userFetch = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    [userFetch setPredicate:[NSPredicate predicateWithFormat:@"userName = %@", userName]];
    NSError *error = nil;
    NSArray *fetchedUser = [[self context] executeFetchRequest:userFetch error:&error];

    if (error)
    {
        NSLog(@"findUser Error: %@", error);
        return nil;
    }
    else if ([fetchedUser count] < 1)
    {
        return nil;
    }
    else
    {
        if ([fetchedUser count] != 1)   // should always be zero or 1.
        {
            return nil;
        }

        User *user = (User *)[fetchedUser objectAtIndex:0];
        return user;
    }
}

电话会在这里发生:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    . . .

   NSString *uName = ((User *)[currentUserList objectAtIndex:indexPath.row]).userName;
   uManager.userObj = [svoDataHelper findUser:uName];
   [detail didSelectUserWithName:[uManager userName]];
}

1 个答案:

答案 0 :(得分:1)

您的代码非常详细。在获取后尝试此操作:(我使用的是result而不是fetchedUser)。

return result.count == 1 ? result.firstObject : nil;

泄漏可能发生在其他地方,很可能发生在不透明的数据助手和数据管理器类中。一种策略是尝试在didSelectRowAtIndexPath中进行提取,看看你是否仍然得到泄漏。