8

Objective-C の「クラスの継続」と呼ばれるものを私はよく理解できません。これですか / これですか…</p>

  1. @implementation( .m) ファイルで Ivar が宣言されていますか?
  2. クラスカテゴリの別名?(おそらく、ASFAIKカテゴリに Ivars を含めることはできません)
  3. クラス拡張の別名?
  4. 他の何か?

それは言った...

  1. そのようなものの範囲、寿命、および使用例は何ですか?
  2. これは ARC 固有の「機能」ですか?
  3. それらを使用するための特定のランタイムまたはその他の要件はありますか?
  4. も作成するのに適切な場所@propertyですか? @interfaceまた、ファイルや宣言よりも、ivar やプロパティを設定するのにこれが適しているのはなぜでしょうか?
  5. なぜ人々はそのような特定の用語を使用して議論を複雑にするのですか? (私が見つけた)どの公式文書にも存在しないようです?

問題のObjective-Cでは、.mファイルとは対照的に、ヘッダーファイルで何か(プロパティなど)を定義することの違いは何ですか? 議論はこの問題に触れていますが、問題をさらに曇らせるだけです-または、少なくとも用語の標準的な参照/定義を提供できません...したがって、この質問.

4

1 に答える 1

7

継続クラスは、Apple がクラス拡張と呼んでいるものです。私は、clangがそれらを「継続クラス」と呼び、gccが「クラス継続」を使用するのを見てきました。

これを clang または gcc でコンパイルします。

@interface Foo : NSObject
@property int a;
@end

@interface Foo()
@property float a;
@end

...そして、変な名前でエラーが発生します。

残りの質問に答えるには:

  1. そのようなものの範囲、寿命、および使用例は何ですか?

拡張機能は、クラスのプライベート インターフェイスを宣言するために使用されます。これを使用して、パブリック プロパティの宣言を再宣言 (改良) することもできます。

  1. これは ARC 固有の「機能」ですか?

番号。

  1. それらを使用するための特定のランタイムまたはその他の要件はありますか?

クラス拡張はコンパイル時の概念であり、特別なランタイムは必要ありません。もちろん、それらをサポートするコンパイラが必要です (現在のバージョンでは、clang と gcc の両方が必要です)。

  1. これは @property を作成する適切な場所でもありますか? そして、@interface ファイル / 宣言よりも、ivar やプロパティを設定するのにこれが適しているのはなぜでしょうか?

はい。プライベート プロパティが必要な場合があるためです。

  1. なぜ人々はそのような特定の用語を使用して議論を複雑にするのですか? (私が見つけた)どの公式文書にも存在しないようです?

ええと、私は全世界が英語を話せればいいのですが、当面は学校で英語を学ばなければならなかったという事実に満足しています。

于 2012-04-24T16:12:28.330 に答える