求教,这部分代码到底哪里内存泄露了啊?
Lithium
由 Lithium
发布于 2013年11月15日
| 更新于 2013年11月17日
无人欣赏。
__weak AFHTTPRequestOperation *commFriendsRequest = [completedRequests objectAtIndex:1];
if(!commFriendsRequest.error&&commFriendsRequest.responseData){
NSDictionary *commDic = [NSJSONSerialization JSONObjectWithData:commFriendsRequest.responseData options:NSJSONReadingMutableContainers error:NULL];//泄露46.2%
int status1 = [[commDic objectForKey:@"status"]intValue];
if(status1 == kSuccessCode){
NSArray *commFriendsArray = [commDic objectForKey:@"data"];
if(commFriendsArray&&commFriendsArray.count){
NSMutableArray *userItems = [NSMutableArray arrayWithCapacity:commFriendsArray.count];//泄露30.8%
for(NSDictionary *dic in commFriendsArray){
userItem *item = [[userItem alloc]initFromServer:dic];//23.1%
[userItems addObject:item];
}
if(profile){//共同好友与资料都成功
profile.commonFriends = userItems;
successBlock(profile);
}else{
if(status0==kSuccessCode){//共同好友
successBlock(userItems);
}else{
NSError *error = [NSError errorWithDomain:kErrorDomain code:status0 userInfo:nil];
failedBlock(error);
}
}
}else if(status0==kSuccessCode){//无共同好友,有profile
successBlock(profile);
}
}else{
if(status0==kSuccessCode){//资料有共同好友失败
successBlock(profile);
}else{//都失败了
NSError *error = [NSError errorWithDomain:kErrorDomain code:status1 userInfo:nil];
failedBlock(error);
}
}
}else{
failedBlock(commFriendsRequest.error);
}
在ARC底下Instruments显示就这么一块泄露,我看了半天不知道哪些的不对。
这块代码是在底下这个block里面的。
[client enqueueBatchOfHTTPRequestOperations:@[profileOperation,commFriendsOperation] progressBlock:^(NSUInteger finished, NSUInteger total){} completionBlock:^(NSArray *completedRequests){
//Code above placed here
}]
Thanks in advance.
共5条回复
楼长
·
hzm0318hzm
回复于 2013年11月15日
目测没有啥泄露啊,我也经常出这问题,莫名其妙的在没有retain的情况下用instruments检测出了泄露,一直没法解决
2楼
·
freecunix
回复于 2013年11月16日
看不出来,而且也不能确保就是这个Block里面的问题。。
最笨最古老的办法:把这段代码单独摘出去,然后用ui动画延时模拟网络请求,在把有信心的代码段一点一点去掉。。。 一定能找出来。
祝你好运。
3楼
·
terryso
回复于 2013年11月16日
我觉得这种问题最好是现在GitHub上建一个可以重现此问题的demo,否则单看代码,没亲身验证的话,很难看出啥问题
4楼
·
5楼
·
langhua9527
回复于 2013年11月17日
用AFN吧。。。