作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在分析一份崩溃报告,发现了一个可能由竞争条件引起的异常(我的最佳猜测)。
崩溃日志:
Fatal Exception: NSInvalidArgumentException
*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[9]
0 CoreFoundation
__exceptionPreprocess + 132
2 CoreFoundation
-[__NSPlaceholderArray initWithObjects:count:] + 412
3 CoreFoundation
-[NSArray initWithArray:range:copyItems:] + 464
最有可能的罪魁祸首是我的代码中的这个。由于该数组永远不应包含 nil 值,我的猜测是可能存在竞争条件,因为此行在重复计时器上运行,并且批处理数组会根据基于位置的请求进行更新,这些请求也会定期在其他地方出现。
NSArray *batchesCopy = [self.batches copy];
我的问题是防止这些竞争条件的最佳方法是什么?一般来说,是否有一种线程安全的方法来进行数组复制或数组编辑?例如互斥锁或可能在属性上使用“原子”选项?
最佳答案
有语言级别锁定:
@synchronized(self){
//array operations
}
关于ios数组崩溃多线程问题,线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635869/
我是一名优秀的程序员,十分优秀!