OC

Knowledge OS
登录 注册
全部话题 移民 创业 iOS Mac Objective-C Swift Android 招聘 求职

求教,这部分代码到底哪里内存泄露了啊?

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楼 ·
Lithium 回复于 2013年11月17日

1楼 @hzm0318hzm

2楼 @freecunix

3楼 @terryso

多谢各位,我也干脆懒得看这块了,几十byte的泄露,先放着。

谢谢@freecunix @terryso 提供的方法,有时间再尝试看看。

5楼 ·
langhua9527 回复于 2013年11月17日

用AFN吧。。。

登录 或者 注册

AltStyle によって変換されたページ (->オリジナル) /