objective-c - 执行选择器 ARC 警告

标签 objective-c ios xcode automatic-ref-counting

<分区>

Possible Duplicate:
performSelector may cause a leak because its selector is unknown

我在非 ARC 中有这段代码可以正常工作,没有错误或警告:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
{
    // Only care about value changed controlEvent
    _target = target;
    _action = action;
}

- (void)setValue:(float)value
{
    if (value > _maximumValue)
    {
        value = _maximumValue;
    } else if (value < _minimumValue){
        value = _minimumValue;
    }

    // Check range
    if (value <= _maximumValue & value >= _minimumValue)
    {
        _value = value;
        // Rotate knob to proper angle
        rotation = [self calculateAngleForValue:_value];
        // Rotate image
        thumbImageView.transform = CGAffineTransformMakeRotation(rotation);
    }
    if (continuous)
    {
        [_target performSelector:_action withObject:self]; //warning here
    }
}

但是,在我将项目转换为 ARC 后,我收到此警告:

“执行选择器可能会导致泄漏,因为它的选择器是未知的。”

我会很感激关于如何相应地修改我的代码的想法..

最佳答案

我发现避免警告的唯一方法是抑制它。您可以在build设置中禁用它,但我更喜欢在我知道它是虚假的地方使用编译指示来禁用它。

#       pragma clang diagnostic push
#       pragma clang diagnostic ignored "-Warc-performSelector-leaks"
            [_target performSelector:_action withObject:self];
#       pragma clang diagnostic pop

如果你在多个地方遇到错误,你可以定义一个宏来更容易地抑制警告:

#define SuppressPerformSelectorLeakWarning(Stuff) \
    do { \
        _Pragma("clang diagnostic push") \
        _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
        Stuff; \
        _Pragma("clang diagnostic pop") \
    } while (0)

您可以像这样使用宏:

SuppressPerformSelectorLeakWarning([_target performSelector:_action withObject:self]);

关于objective-c - 执行选择器 ARC 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895287/

相关文章:

ios - 在加载图 block 之前从 MapView 退出时的 EXC_BAD_ACCESS

c++ - 如何在 Xcode for Mac OSX 中启用 C++17?

objective-c - 呈现 Modal ViewController 会导致 SIGABRT

iphone - iPhone 版 CometD/Bayeux 客户端

ios - 如何根据核心数据中的一个字段获得不同的结果

iphone - 如何根据此属性对自定义对象数组进行排序?

ios - XCode 5 更新打破了 Storyboard场景布局

ios - 使用命令 "ARCHIVE FAILED"进行归档过程时出现 "xcodebuild archive\"错误

ios应用程序引擎端点分页

ios - 由于仅变换层而在 UIView 中发出警告