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

3つの警告が表示されます

警告:プロパティ「yaw」とそのスーパークラス「CMAttitude」に一致する「atomic」属性がありません

警告:プロパティ'pitch'とそのスーパークラス'CMAttitude'には一致する'atomic'属性がありません

警告:プロパティ「roll」とそのスーパークラス「CMAttitude」に一致する「atomic」属性がありません

スーパークラスのように機能し、csvファイルからのみデータをロードできるCMMotionManagerおよびCLLocationManagerサブクラスを作成するには、問題のすべてのサブクラスが必要です。私がそれらをサブクラス化する唯一の理由は、それらの読み取り専用プロパティにアクセス(またはオーバーライド)するためです。これらのプロパティを設定する機能がないと、実際のCMMotionManagerクラスおよびCLLocationManagerクラスと同じオブジェクトを返す方法がありません。

現在、少し気になる警告を無視するために#pragmaを使用する必要があることを除けば、すべてが正常に機能します。

この警告が生成される理由を誰かが知っていますか?プロパティが非アトミックに設定されていないことを考えると(アトミックがデフォルトです)、私にはまったく手がかりがありません。

これらのプロパティをアトミックにするために明示的に行う必要があることはありますか?

4

1 に答える 1

5

エラーメッセージは少し紛らわしいです。CMAttitudeドキュメントでこれらのプロパティの定義を見ると、実際にはアトミックとして宣言されていることがわかります。したがって、プロパティも非アトミックとして宣言する必要があります。

于 2010-11-04T00:13:25.430 に答える