[英]NSOperation ready but not starting on iOS 7
我們創建了一個操作框架,以添加一些在基類中找不到的功能(例如,跟蹤成功/失敗)。 父級操作通常是非並行的,並且只能存在於管理子級操作中。 通常是並發的子操作(異步下載xml和媒體)。
當我們在iOS 7上運行我們的應用程序時,將一些操作添加到操作隊列中,完成約3/4個操作,然后該應用程序似乎掛起。
當我在調試器中暫停應用程序,並檢查隊列中的操作(sOpQueue.operations)時,其中許多已准備好運行(isReady返回TRUE),但顯然沒有一個正在執行(isExecuting返回FALSE,我看不到任何在任何線程上運行的操作的證據)。
從iOS 7開始,這是一個新問題。
當我增加或減少並發操作數時,行為似乎沒有改變。
是否有人對如何確定為什么未開始就緒操作有任何建議?
謝謝,查克
您是否正在發布isReady
鍵值觀察通知?
例如,我使用一個屬性:
@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
,考慮優先級等)。
我敢打賭,您的並發操作尚未正確完成。 提高並發操作的數量,並查看在掛起之前是否可以運行更長的時間。 然后找出為什么並發操作未正確設置isFinished的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.