私はスタンフォード大学の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. はfstreamオブジェクトを宣言できませんか?それをポインタとして宣言できますか?
- 4. フィールド 'Executive :: history'を抽象型に宣言することはできません
- 5. java.util.Scannerオブジェクト宣言ここでは使用できません
- 6. libgit2 GIT_BUF_INITは宣言されていません。それはどこで宣言されるべきですか?
- 7. テンプレートなしでC++関数を宣言することはできません
- 8. Switch宣言で型宣言を行うことはできますか?
- 9. "シンボルを見つけることができません"メソッドが宣言されていますが、メソッドが宣言されています
- 10. Javaはシンボルget.Methodを見つけることができませんが、メソッドが宣言されています
- 11. C++フォワード宣言エラー - Lvalueをバインドすることはできません
- 12. インタフェース定義時に例外を宣言するか、宣言するべきではありませんか?
- 13. クラスエラー:クラスを宣言できません
- 14. DOMPDF_autoload()を再宣言できません
- 15. 宣言できませんKubernetes API型宣言の型式
- 16. XMLは要素の宣言を見つけることができません
- 17. パペット重複宣言:クラス[Mongodb]は既に宣言されています。再宣言できません
- 18. PHP/Laravel 5.1 - 以前にファイルで宣言したメソッドを再宣言できません
- 19. 宣言生成時に「名前を付けることができません」
- 20. OAuthConsumer(SecKeychainItemRef未宣言)を使用することができません - iPhone
- 21. clang - ヘッダファイルに静的なconst intを宣言するには?
- 22. "私は* @ *で@interfaceでメソッドを宣言したときに" ViewController 'に応答しないかもしれません "
- 23. CSS宣言を組み合わせることはできますか?
- 24. エラーで「プロトコル宣言を見つけることができません」
- 25. 要素 'linearlayout'の宣言を見つけることができません
- 26. プロトコルの宣言カスタムプロトコルデリゲートiphoneを見つけることができません
- 27. AndroidがRelativeLayoutの宣言を見つけることができません
- 28. 要素の宣言を見つけることができません「会社
- 29. 要素 'diops'の宣言を見つけることができません
- 30. ビューをヘッダファイルにドラッグできません
コンパイラの動作は、Xcodeの4.5に多少変更されているようです。私は.hで宣言しなかったたくさんのメソッドを持っており、コンパイルエラーは発生しません。私はXcodeの4.2にこのコードを取るときしかし、私は、コンパイラはエラーをスローのiOS 4.3との互換性を確認することができます。 – JScarry
@JScarry - コンパイラフラグのいくつかの並べ替えによって変化しているようですけれども、私は、同様の動作を気づきました。しかし、Xcode 4。5は.m内の '@ interface'の'() 'バージョンの使用を押しています。そこに内部宣言をすべて張り付けることができます。 –