私はスタンフォード大学のiPadとiPhoneアプリケーション開発コースビデオを見ています。インストラクターはビデオ内で、UIオブジェクトを実装ファイルにドラッグ&ドロップしてアクションを作成することができます。しかし、この方法では、メソッドはヘッダーファイルで宣言しません。これは、.mファイルにメソッドを実装しても、.hファイルに宣言しても問題ないのですか?ヘッダファイルにメソッドを宣言することはできませんか?
答えて
あなたは
のObjective-Cの動的メソッドを使用しています:-) "OK" を定義する方法によって異なります参照( "private"、 "public"など)指定子を実際に実行するわけではありません。だから、には、ヘッダファイル内のメソッドを宣言するために、が必要です。
あなたがそうではないと説得しない限り、かなりの量の型チェックが行われるので、コンパイラと戦うことになります。
実装のすべてのメソッドをヘッダファイルに宣言する必要はありません。しかし、ヘッダーファイルにない場合は、別のファイルのリテラル名で参照することはできません。また、実装ファイルでそれらを "前方参照"することもできません。
(これは正規Cからの異なるではないが、C++におけるクラスのメソッドとは異なることに注意してください。)
をそれが特定の状況下で、はいヘッダのメソッドを宣言しないように「OK」です。たとえば、ARCを使用する場合、コンパイラは一般的にメソッドシグネチャを知る必要があるため、正しいことを行うことができます。しかし、基本的には、メソッドを使用している場合は、呼び出すメソッドについて既に知っている必要があります。
あなたがInterface Builderの話をしているので、それはそれはあなたのヘッダーと実装ファイルの全体の文脈「を参照してください」とメソッドが存在することを知ることができるので、それはすべてのメソッドについて知っているという点でわずかに異なるのです。すなわち上記の私の用語では、メソッドは使用前に定義されています。使用前に定義に関して
、一般的に受け入れられているアプローチはどちらかである:
は、インターフェイスファイル(.H)でメソッドを定義します。例えば:
MyClass.h
@interface MyClass : NSObject - (void)someMethod; @end
MyClass.m
@implementation MyClass - (void)someMethod { // do something } @end
がクラス継続カテゴリ内のメソッドを定義します。例えば:
MyClass.h
@interface MyClass : NSObject @end
MyClass.m
@interface MyClass() - (void)someMethod; @end @implementation MyClass - (void)someMethod { // do something } @end
- 1. ヘッダファイルの宣言は必須ですか?
- 2. appCodeのヘッダファイル(.h)にメソッドを自動的に宣言することは可能ですか?
- 3. java.util.Scannerオブジェクト宣言ここでは使用できません
- 4. はfstreamオブジェクトを宣言できませんか?それをポインタとして宣言できますか?
- 5. "シンボルを見つけることができません"メソッドが宣言されていますが、メソッドが宣言されています
- 6. C++フォワード宣言エラー - Lvalueをバインドすることはできません
- 7. Switch宣言で型宣言を行うことはできますか?
- 8. パペット重複宣言:クラス[Mongodb]は既に宣言されています。再宣言できません
- 9. OAuthConsumer(SecKeychainItemRef未宣言)を使用することができません - iPhone
- 10. エラーで「プロトコル宣言を見つけることができません」
- 11. "私は* @ *で@interfaceでメソッドを宣言したときに" ViewController 'に応答しないかもしれません "
- 12. ビューをヘッダファイルにドラッグできません
- 13. プロトコルの宣言カスタムプロトコルデリゲートiphoneを見つけることができません
- 14. 要素 'diops'の宣言を見つけることができません
- 15. 揮発性として宣言することはできません、この権利は?:ある
- 16. テンプレート変数を定義せずに宣言できません
- 17. 問題があると再宣言できません
- 18. ここでの宣言はC言語で許可されていません。
- 19. すべてのメソッドと変数を静的に宣言することでシングルトンオブジェクトを作成できますか?
- 20. s:SpriteVisualElementと「コンポーネントの宣言はここでは許可されていません」
- 21. connectionstringはweb.configで宣言せずにiisで宣言します
- 22. PostgreSQLで関数内に変数を宣言できません
- 23. PHP - 静的メソッドと非静的メソッドを宣言できますか?
- 24. 匿名オブジェクトでメソッドを宣言することは不可能ですか?
- 25. このCSS宣言はなぜ表示されませんか?
- 26. 警告:宣言は何も宣言していません
- 27. PHP:関数エラーを再宣言できませんか?
- 28. インターフェイスは型を宣言できません
- 29. 'SalesTaxPct'はこのスコープで宣言されていません
- 30. Bison/Yacc:yyparseはこのスコープで宣言されていません
コンパイラの動作は、Xcodeの4.5に多少変更されているようです。私は.hで宣言しなかったたくさんのメソッドを持っており、コンパイルエラーは発生しません。私はXcodeの4.2にこのコードを取るときしかし、私は、コンパイラはエラーをスローのiOS 4.3との互換性を確認することができます。 – JScarry
@JScarry - コンパイラフラグのいくつかの並べ替えによって変化しているようですけれども、私は、同様の動作を気づきました。しかし、Xcode 4。5は.m内の '@ interface'の'() 'バージョンの使用を押しています。そこに内部宣言をすべて張り付けることができます。 –