使用 AFNetworking 框架遇到了一个诡异问题,模拟器正常,真机完全不执行

2020-03-23 01:43:23 +08:00
 pikoqian98

今天写个小 demo,在模拟器上( iPhoneX )调试请求 ok,但是在真机上死活不执行网络请求的代码,直接跳过,控制台也不报错,打断点仔细看了一下发现 AFHTTPSessionManager 没有被实例化( AFHTTPSessionManager* manager = [AFHTTPSessionManager manager]是成功执行的,但是没有生成对象),这是什么操作,求解答(第一次发帖,不知道在 V2EX 上怎么插图)

1142 次点击
所在节点    问与答
4 条回复
dorentus
2020-03-23 11:44:20 +08:00
原则上讲,你需要提供:

- AFNetworking 的版本
- 你的项目的 Deployment target 、真机和模拟器的系统版本
- 一个可以重现问题的最小版本的示例代码
- 其他细节,如模拟器上如何调试请求 OK 的;真机上如何调试发现 AFHTTPSessionManager 没有实例化的

----

不过我猜,可能是你创建的 AFHTTPSessionManager 没有自己 retain,在请求完成、触发回调之前被 release 了。
pikoqian98
2020-03-23 14:23:15 +08:00
你好,Xcode 版本是 11.3.1 (11C504),真机 iOS 版本是 13.3.1,模拟器版本是 13.3,AFNetworking 版本是 3.2.1,deploymentTareget 为 9.0
测试代码:
AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
NSLog(@"manager------:%p",manager);
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"res%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];
真机上直接打印地址为 0x0,但是模拟器打印内存地址是存在的
dorentus
2020-03-23 16:26:29 +08:00
我上面那个猜测是错的。

AFHTTPSessionManager 创建的 session 的 delegate 就是 manager 自己,而 session retain 了这个 delegate 。

----

我本地试了一下上面的代码,没能重现🤦🏻

----

那么不管上面打印出来的 manager 的地址的问题,先排除一下:

1. 把地址改成 https 的,排除 ATS 的影响
2. 在 failure block 里面也加上 NSLog,看看是不是报错了
pikoqian98
2020-03-23 22:24:24 +08:00
@dorentus
感谢您的回复,这些原因之前也排查了一下,似乎确实是没有生成 manager 这个实例,不清楚是为什么,我在模拟器上测试网络请求也是正常执行的。
刚刚把 cocoapods 导入的 AFNetworking 移除,更换成手动导入项目里,真机调试上正常运行了,我 cocoapods 安装应该是正常的,可能是 AFNetworking.framework 导进 build phases 的过程我有不对的地方。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655210

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX