【问题标题】:Xcode Warning: "Property '<x>' and its super class '<y>' don't have matching 'atomic' atrribute"Xcode 警告:“属性 '<x>' 及其超类 '<y>' 没有匹配的 'atomic' 属性”
【发布时间】:2010-11-04 00:08:11
【问题描述】:

我在编译多个现有 Cocoa 类的子类时收到 Xcode 警告。比如下面这个类

   @interface HMAttitude : CMAttitude
    {
        double pitch;
        double roll;
        double yaw;
    }

    @property (readwrite) double pitch;
    @property (readwrite) double roll;
    @property (readwrite) double yaw;

    @end

-

@implementation HMAttitude

@synthesize pitch, roll, yaw;

- (id) init
{
    return [super init];
}

@end

产生三个警告

警告:属性“偏航”及其超类“CMAttitude”没有匹配的“原子”属性

警告:属性“pitch”及其超类“CMAttitude”没有匹配的“原子”属性

警告:属性“roll”及其超类“CMAttitude”没有匹配的“atomic”属性

为了创建 CMMotionManager 和 CLLocationManager 子类,它们的作用类似于超类,所有相关子类都是必需的,仅从 csv 文件加载它们的数据。我对它们进行子类化的唯一原因是获得访问(或覆盖)它们的只读属性。如果无法设置这些属性,我将无法返回与真正的 CMMotionManager 和 CLLocationManager 类相同的对象。

除了不得不使用#pragma 忽略稍微困扰我的警告之外,目前一切正常。

有谁知道为什么会产生这个警告?鉴于属性未设置为非原子(原子是默认值),我完全不知道。

为了使这些属性成为原子属性,我需要明确执行什么操作吗?

【问题讨论】:

    标签: objective-c xcode gcc-warning


    【解决方案1】:

    错误消息有点令人困惑——如果您查看CMAttitude documentation 中这些属性的定义,您会发现它们实际上被声明为-原子。所以,你也应该将你的属性声明为非原子的。

    【讨论】:

    • 谢谢!不敢相信我没有意识到这一点。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 2011-03-31
    • 2018-05-28
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多