ios - 如何防止我不知道的对象上的 EXC_BAD_ACCESS 在 iOS 9 中发布?

标签 ios objective-c xcode ios9 exc-bad-access

我使用 NSURLConnection 下载文件,当用户点击返回时,我不一定知道连接是否已完成以及是否已正确处理。所以我添加了以下检查,如果连接不为空,则取消它。

if (self.urlConnection){
    [self.urlConnection cancel];
}

这在 iOS 7/8 中有效,我从未收到过异常。但是现在在 iOS 9 中,当我检查连接是否存在(并且不存在)时,我得到一个异常。这是上面的第一行,在我实际调用 url 之前。

我不明白为什么检查一个对象是否为 nil 会抛出异常,如果抛出的话——我该如何防范这个异常。

有没有一种新方法可以确保对象存在并且在我调用它之前没有被释放?

编辑:这是声明属性的方式:

@property (nonatomic, assign) NSURLConnection *urlConnection;

如果对象实际上还没有被实例化,检查工作正常。只有当连接完成并变为 nil 时,我才会尝试检查支票是否为 nil。这在早期的 iO​​S 版本上没有发生。

最佳答案

是的,有...使用弱引用。

__weak typeof(self) weakSelf = self;
...
..
.
[weakSelf.urlConnection cancel]

关于ios - 如何防止我不知道的对象上的 EXC_BAD_ACCESS 在 iOS 9 中发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34937390/

相关文章:

objective-c - 制作 UIView 及其所有 subview 的深拷贝

ios - 在 iOS 应用程序中管理订阅的链接最终会出现空白屏幕

objective-c - 如何在 iPad 的 UITextField 中限制特殊字符?

iphone - Unix下针对iphone开发

xcode - 如何在不包含 Mac OS X 10.6 SDK 的 Xcode 版本中构建它

ios - 使用 Flickr API 将图像加载到 imageView 中

ios - UIAlertView 的 UIAlertViewStylePlainTextInput 自定义字体在 iOS 中不起作用

ios - React native 错误窗口导致 iOS 崩溃

iphone - 如何在 obj-c 上合成 C 数组的 getter 和 setter

iphone - 根据 UILabel 大小展开 UITableViewCell