NSOperation 已准备就绪但未在 iOS 7 上启动

Chu*_*tte 3 nsoperation nsoperationqueue ios

我们创建了一个操作框架来添加一些在基类中没有的功能(例如跟踪成功/失败)。父操作通常是非并发的,可能只是为了管理子操作而存在。通常并发的子操作(异步下载 xml 和媒体)。

当我们在 iOS 7 上运行我们的应用程序时,将一些操作添加到操作队列中,大约有 3/4 的操作完成,然后应用程序似乎挂起。

当我在调试器中暂停应用程序,并检查队列中的操作 (sOpQueue.operations) 时,其中许多已准备好运行(isReady 返回 TRUE),但显然它们都没有执行(isExecuting 返回 FALSE,而我看不到任何线程上运行的任何操作的证据)。

这是 iOS 7 的新问题。

当我增加或减少并发操作的数量时,行为似乎没有改变。

有没有人对如何确定未启动就绪操作的原因有任何建议?

谢谢,查克

Rob*_*Rob 5

您是否正在发布isReady Key Value Observing通知?

例如,我使用一个属性:

@property (nonatomic, getter = isReady) BOOL ready;
Run Code Online (Sandbox Code Playgroud)

然后有一个自定义设置器:

- (void)setReady:(BOOL)ready
{
    [self willChangeValueForKey:@"isReady"];
    _ready = ready;
    [self didChangeValueForKey:@"isReady"];
}
Run Code Online (Sandbox Code Playgroud)

以及调用的自定义 getter super

- (BOOL)isReady
{
    return _ready && [super isReady];
}
Run Code Online (Sandbox Code Playgroud)

并且,因为你同时实现了 setter 和 getter,所以你必须在开始时手动合成属性@implementation(通常你不必再这样做了,但是如果你实现了所有的自定义访问器,你必须手动@synthesize) :

@synthesize ready = _ready;
Run Code Online (Sandbox Code Playgroud)

然后,当满足以下两个条件时,操作开始: