gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:55:12 27 4
gpt4 key购买 nike

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

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

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

这是 iOS 7 的新问题。

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

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

谢谢,查克

最佳答案

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

例如,我使用一个属性:

@property (nonatomic, getter = isReady) BOOL ready;

然后有一个自定义 setter :

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

以及调用 super 的自定义 getter:

- (BOOL)isReady
{
return _ready && [super isReady];
}

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

@synthesize ready = _ready;

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

  • ready属性设置为YES(注意,使用setter,不能直接使用ivar);

    self.ready = YES;

    [self setReady:YES];
  • 满足所有其他标准 NSOperation 条件(例如,操作之间的依赖性、遵守 maxConcurrentOperationCount、考虑优先级等)。

    <

关于ios - NSOperation 准备就绪但未在 iOS 7 上启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19257458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com