簡體   English   中英

Clang靜態分析儀警告消耗塊

[英]Clang static analyzer warns about consumed block

我有以下代碼(在非ARC項目中):

- (void)loadWithCompleteBlock:(void (^)(void))complete
{    
    ...
    complete = [complete copy];
    ...            
    [[NSOperationQueue mainQueue] addObserver:self forKeyPath:@"operationCount" options:0 context:complete];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *) context
{
    void (^complete)(void) = context;
    [self performSelectorInBackground:@selector(loadFilesWithCompleteBlock:) withObject:complete];
    [complete release];
}

靜態分析器提供警告Potential leak of an object stored into 'complete'

我厭倦了將NS_RELEASES_ARGUMENTCF_RELEASES_ARGUMENT添加到context參數中,但沒有任何效果。

有任何想法嗎?

通過void*傳遞對象並在回調方法中釋放它是分析器無法理解的。 你可以在這些情況下讓分析儀靜音。

但在這種情況下,代碼仍然被破壞,應該重構。 您不能使用KVO的上下文將對象傳遞給回調:您需要上下文來標識觀察。 例如,參見Dave Dribin關於如何正確進行KVO的描述

您不能只將塊設置為您添加的操作的完成塊嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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