1. ホーム
  2. objective-c

[解決済み] Objective-Cは構造体の使用を禁じていますか?

2022-02-14 03:18:04

質問

Objective Cの初心者です

単純な struct となり

arc forbids objective-c objects in struct

ARCを見上げる Objective Cのシンタックスを定義した仕様のようですが、正しいですか?

次に struct が許されない場合は?

ありがとうございました。

編集:サンプルとしていくつかのコード

@implementation Cities {
    // The goal is to have a struct that holds information about a city,
    // like when a person started and ended living there.
    // I was trying to make this struct an instance variable of the Cities
    // class
    // XCode doesn't like the below struct definition

    struct City
    {
        NSString *name;
        int *_startYear;
        int *_endYear;
    };
}

解決方法は?

<ブロッククオート

アークフォービッド objective-c オブジェクト 構造体

構造体はC言語の構造体です。コンパイラは、非常にわかりやすい言葉で、構造体の中にObjective-Cのオブジェクトを持つことはできないと言っているのであって、構造体が違法だと言っているわけではありません。

通常のC言語の構造体を使うのは自由です。

あなたの例では、Objective-Cのオブジェクトへの参照を置こうとしています。 NSString の中にある。 struct これはARCと互換性がありません。

構造体は、一般に単純なデータ構造に使用されます。Objective-Cのコードでよく目にするのは、以下のような例です。 CGPointCGRect .

CGPoint は、次のようになります。

struct CGPoint 
{ 
   CGFloat x; 
   CGFloat y; 
};

A CGFloat は、単に double 2次元空間における点を表現するものです。構造体には、他の構造体へのポインタ、C-配列、および以下のような標準的なCデータ型が含まれます。 int , char , float ... また、Objective-Cのクラスは構造体を含むことができますが、その逆はうまくいきません。

構造体もかなり複雑になりますが、これは非常に幅広いトピックなので、Googleを使って研究するのが一番です。