0
@class  GSValue;
@interface GSValue : NSObject   // Help the compiler
@end
@class  GSNonretainedObjectValue;
@interface GSNonretainedObjectValue : NSObject  // Help the compiler
@end

NSValue.mからの上記のコード。私はグーグルでいくつかの情報を教えてくれますが、@ class(@interfaceを伴わない)が2つのクラス間のクラス前方宣言に使用されているが、クラスのポインターとしてのみ宣言されていることを示しています。私の質問は、なぜ「@classGSValue;」なのかということです。直後に「@interfaceGSValue:NSObject」が続きますが、どういう意味ですか?

4

1 に答える 1

0

よくわかりませんが、この場合は前方宣言+宣言でGSValueあり、他のクラスはNSObject. したがって、コンパイラは、書き込み時に警告を出しません[GSValue class]。これは実際には「ヘルプ」ではなく、警告を取り除くためのものです。

ただし、これが当てはまる場合、なぜ前方宣言を使用するのかわかりません。ディレクティブ@interfaceなしで同じように機能するからです。@class

私はそれをそのように見ています。

彼らは最初に前方宣言を使用しました。その後、コンパイラが警告を出すことに気付き、セクションReceiver 'GSValue' is a forward class and corresponding @interface may not existを追加しましたが、以前のディレクティブ@interfaceを削除するのを忘れたか、わざわざ削除しませんでした。@class

于 2013-01-16T16:42:30.857 に答える