iOS 中 NSURLConnection 提前释放的一个BUG

2017-09-05  本文已影响66人  天空中的球

按理说 NSURLConnection 已经在 iOS 9.0 的时候被弃用了,但是我们的老代码中还是有它的,毕竟也是同时要支持 iOS 8.0 的,然而很凑巧,我们最近遇到了一个 BUG 就是关于它的。

NSURLConnection  *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

然后我们在 Fabric 中收到了 EXC_BAD_ACCESS KERN_INVALID_ADDRESS 的错误, 具体的崩溃就是在 [connection start]这一行。

EXC_BAD_ACCESS KERN_INVALID_ADDRESS

于是我们加了一个判断:

NSURLConnection  *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (!connection) {
    return;
}
[connection start];

然而还是依然出现这个问题,于是我试着 NSLog 直接打印下,发现这个问题又没了。。。

NSURLConnection  *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"connection == %@", connection);
[connection start];

然后经小伙伴的提醒,直接对 Connection Copy 下这样就好了

NSURLConnection  *connection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] copy];
[connection start];
为什么会这样呢?

这个是 NSURLConnection 老的这个类之前遗留下的一个问题,之前貌似苹果还有专门文档说这个问题的,现在木有了,所以建议以后不要用这个 NSURLConnection, 毕竟苹果也是希望用 NSURLSession 替换的。同时对于老代码中的这个,可以适当加上一些持有的动作,避免出现这个问题。 当然对 NSURLConnection 这个问题,有其他好的解决方案欢迎告知啊!

上一篇下一篇

猜你喜欢

热点阅读