我使用 NSProgress 通知复杂任务的进度(该任务由许多子任务组成,可以由其他子任务组成)。
我在 startTask 方法中创建了主要进度:
- (void)_startTask
{
_progress = [NSProgress progressWithTotalUnitCount:100]; //sometimes crash is here
<...>
}
没有当前进度:
(lldb) po [NSProgress currentProgress]
无
有时我会因奇怪的 stackTrace 崩溃:
0: 0x000000018539a7e8 in object_isClass ()
1: 0x0000000186b39fe0 in KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED ()
2: 0x0000000186b384bc in
NSKeyValueWillChangeWithPerThreadPendingNotifications ()
3: 0x0000000186cac9c0 in -[NSProgress _setValueForKeys:settingBlock:] ()
4: 0x0000000186cacc7c in -[NSProgress setTotalUnitCount:] ()
5: 0x0000000186cab718在 +[NSProgress progressWithTotalUnitCount:] ()
此代码在 mainThread 中执行。
为什么会发生这种情况,我可以做些什么来避免这种情况?