繁体   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