[英]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_ARGUMENT
或CF_RELEASES_ARGUMENT
添加到context
參數中,但沒有任何效果。
有任何想法嗎?
通過void*
傳遞對象並在回調方法中釋放它是分析器無法理解的。 你可以在這些情況下讓分析儀靜音。
但在這種情況下,代碼仍然被破壞,應該重構。 您不能使用KVO的上下文將對象傳遞給回調:您需要上下文來標識觀察。 例如,參見Dave Dribin關於如何正確進行KVO的描述 。
您不能只將塊設置為您添加的操作的完成塊嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.