簡體   English   中英

NSOperation就緒,但無法在iOS 7上啟動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM