[解決済み] Objective-C。 class 指令は @interface の前にあるか?
2023-05-29 09:56:56
質問
この2つのクラス宣言の違いは何でしょうか? なぜここで@classが利用されるのか理解できません。 ありがとうございます。
@class TestClass;
@interface TestClass: UIView {
UIImage *image1;
UIImage *image2;
}
と
@interface TestClass: UIView {
UIImage *image1;
UIImage *image2;
}
どのように解決するのですか?
@class
は、循環的な依存関係を断ち切るために存在します。 例えば、AクラスとBクラスがあるとします。
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
Chicken; meet Egg. AのインターフェイスはBが定義されていることに依存し、逆もまた然りなので、これは決してコンパイルすることができません。
したがって、これを修正するには
@class
:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@class
は、そのようなクラスがどこかに存在し、したがって、そのクラスのインスタンスを指すように宣言されたポインタは完全に有効であることをコンパイラに効果的に伝えます。 しかし、インスタンス参照でメソッドを呼び出すことができず、その型は
@class
としてしか定義されていないインスタンス参照に対してメソッドを呼び出すことはできません。これはコンパイラが利用できる追加のメタデータがないからです (呼び出し先を
id
を通しての呼び出しとして評価されるように呼び出しサイトを戻すかどうかは覚えていません)。
あなたの例では
@class
は無害ですが、まったく不要です。
関連
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Objective-Cの定数
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] .の違いは何ですか?(ドット)と$(ドルマーク)の違いは何ですか?
-
[解決済み】Objective-C ARC: strong vs retainとweak vs assign
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] このgdbの出力は何を意味しているのでしょうか?
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
-
[解決済み] Objective-CでSwift構造体を使用する方法
-
[解決済み] Swift ネイティブベースクラスまたは NSObject
-
[解決済み] idの意味は?
-
[解決済み] Objective-Cでクラスのインスタンスを@protocolにキャストする
-
[解決済み] NSStringの最初の3文字を取得するには?
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
-
[解決済み] NSStringをstd::stringに変換するにはどうしたらいいですか?