[解決済み] .hと.mファイルにおける@interface定義の相違点
2023-05-25 13:40:26
質問
通常、私たちは
@interface interface_name : parent_class <delegates>
{
......
}
@end
.hファイルで宣言された変数のプロパティを、.mファイルで合成しています。
しかし、いくつかのコードでは、この@interface....@endメソッドは.mファイルにも保持されています。これは何を意味するのでしょうか。 両者の違いは何でしょうか?
また、.mファイルで定義されたインターフェイスファイルのゲッターとセッターについて、いくつかの言葉を与えてください。
ありがとうございました。
どのように解決するのですか?
よくあるのは
@interface
を追加して、プライベートメソッドを含むカテゴリを定義するのが一般的です。
Person.h:
@interface Person
{
NSString *_name;
}
@property(readwrite, copy) NSString *name;
-(NSString*)makeSmallTalkWith:(Person*)person;
@end
Person.m:
@interface Person () //Not specifying a name for the category makes compiler checks that these methods are implemented.
-(void)startThinkOfWhatToHaveForDinner;
@end
@implementation Person
@synthesize name = _name;
-(NSString*)makeSmallTalkWith:(Person*)person
{
[self startThinkOfWhatToHaveForDinner];
return @"How's your day?";
}
-(void)startThinkOfWhatToHaveForDinner
{
}
@end
プライベートカテゴリ」(名前のないカテゴリの正式名称は「プライベートカテゴリ」ではなく、「クラス拡張」です).mは、メソッドが定義されていることをコンパイラが警告するのを防ぎます。しかし
@interface
はカテゴリであるため、その中で ivar を定義することはできません。
Update 6th Aug '12: Objective-Cはこの回答が書かれたときから進化しています。
-
ivars
はクラス拡張で宣言することができます (そして常にそうすることができます - 答えは不正解でした)。 -
@synthesize
は必須ではありません。 -
ivars
の先頭の中括弧で宣言できるようになりました。@implementation
:
ということです。
@implementation {
id _ivarInImplmentation;
}
//methods
@end
関連
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Pythonにおける抽象クラスとインターフェースの違い
-
[解決済み] javaのinterfaceと@interfaceの違いは何ですか?
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み] キューに入れられたperformSelector:afterDelayの呼び出しをキャンセルする
-
[解決済み] Xcodeでプリプロセッサ・シンボルを定義する方法
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RootViewControllerのスイッチングアニメーション
-
[解決済み] Objective-CのクラスでSwiftのプロトコルをインポートする
-
[解決済み] Objective-Cです。カテゴリ内のプロパティ/インスタンス変数
-
[解決済み] なぜObjective-Cはプライベートメソッドをサポートしないのですか?
-
[解決済み] NSURLをローカルファイルのパスに変換する
-
[解決済み] インスタンスメッセージの受信型'CALayer'は前方宣言である」とはどういう意味か?
-
[解決済み] iOS - プログラムでUISwitchを設定する方法
-
[解決済み] NSSetからNSMutableArrayを返す方法
-
[解決済み] ARCはディスパッチキューをサポートしていますか?
-
[解決済み] Xcodeバージョン(CFBundleShortVersionString)とビルド(CFBundleVersion)の違いについて