1

在编译几个将现有 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 忽略稍微困扰我的警告之外,一切正常。

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

为了使这些属性是原子的,我需要明确做些什么吗?

4

1 回答 1

5

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

于 2010-11-04T00:13:25.430 回答