Objective Cの@interfaceが何であるか知りたいですか?プログラマーが変数、クラス名、またはメソッド名を宣言したい場所ですか...?それがJavaのインターフェースのようなものかどうかはわかりません。そして、ObjectiveCの@protocolについても同様です。Javaのインターフェースのようです。誰か詳細な説明をお願いします。本当に感謝しています。
回答:
インターフェイスは、クラスの属性と操作を定義する場所です。実装も設定する必要があります。
プロトコルは、Javaのインターフェースのようなものです。
例えば
@protocol Printing
-(void) print;
@end
実装可能
宣言することによって(インターフェースで混乱して)
@interface Fraction: NSObject <Printing, NSCopying> {
//etc..
Java開発者にとって紛らわしいのは、中括弧{}がインターフェースの終わりではないということです。
@interface Forwarder : Object
{
id recipient;
} //This is not the end of the interface - just the operations
- (id) recipient;
- (id) setRecipient:(id) _recipient;
//these are attributes.
@end
//This is the end of the interface
myObject.lpVtbl->x(&myObject))のように.xまたは.yを介してではなく、cに類似したデュアルインターフェイスを介してメッセージを受信しますmyObject.lpVtbl->Invoke(&myObject, "x", &argArray);。このため、プロトコルとインターフェイスは、ランタイムとコンパイル時のタイプチェックを生成するための情報をコンパイラに提供するのに役立つようです。したがって、スクリプトエンジン/ COMをプロジェクトに導入しない限り、C ++には真の類似点はありません。
これを見ていただければ多分良いです+理解するのに大いに役立ったと思いました
記事から:
@インターフェース
#ifndef __FOO_H__
#define __FOO_H__
class Foo
{
...
};
#include "Foo.h"
...
@interface Foo : NSObject
{
...
}
@end
#import "Foo.h"
@implementation Foo
...
@end
@プロトコル
struct MyInterface
{
void foo() = 0;
}
class A : MyInterface
{
public:
void override foo() { ... }
}
@protocol MyInterface
-(void) foo;
@end
@interface Foo : NSObject <MyInterface>
{
-(void) foo {...}
...
}
@end
@protocol、いくつかの一般的な方法を定義します。@interface定義し、いくつかのカスタムメソッドを定義し@implementationそのインターフェイスを実装します。@interface実装はありません。また、fooメソッドがプロトコルのものと同じである場合は、インターフェイスで繰り返さないでください。
@interfaceObjective-Cの中には、Javaインターフェースとは何の関係もありません。クラスのパブリックインターフェイス、そのパブリックAPIを宣言するだけです。(そして、すでに観察したように、メンバー変数。)JavaスタイルのインターフェースはObjective-Cではプロトコルと呼ばれ、@protocolディレクティブを使用して宣言されます。AppleのObjective-Cプログラミング言語を読む必要があります。これは良い本です–短くて非常にアクセスしやすいです。