Chciałbym wiedzieć, czym jest @interface w celu C? czy to tylko miejsce, w którym programista chce zadeklarować zmienne, nazwę klasy lub nazwy metod ...? Nie jestem pewien, czy jest podobny do interfejsu w Javie. A także o protokole @ w celu C. Wygląda na to, że interfejs w Javie bardziej. Czy ktoś mógłby mi podać szczegółowe wyjaśnienie. Naprawdę to doceniam.
objective-c
Biegun
źródło
źródło
myObject.lpVtbl->x(&myObject)
), ale przez podwójny interfejs, analogiczny do cmyObject.lpVtbl->Invoke(&myObject, "x", &argArray);
. Z tego powodu protokoły i interfejsy wydają się służyć do dostarczania kompilatorowi informacji do generowania sprawdzania typów w czasie wykonywania i kompilacji. Więc nie ma prawdziwej analogii w C ++, chyba że wprowadzisz silnik skryptowy / COM do swojego projektu.prawdopodobnie dobrze, jeśli spojrzysz na to + Pomyślałem, że bardzo pomogło to zrozumieć
Z artykułu:
@berło
C ++
Foo.h
#ifndef __FOO_H__ #define __FOO_H__ class Foo { ... };
Foo.cpp
#include "Foo.h" ...
Cel C
Foo.h
@interface Foo : NSObject { ... } @end
Foo.m
#import "Foo.h" @implementation Foo ... @end
@protokół
C ++
struct MyInterface { void foo() = 0; } class A : MyInterface { public: void override foo() { ... } }
Cel C
@protocol MyInterface -(void) foo; @end @interface Foo : NSObject <MyInterface> { -(void) foo {...} ... } @end
źródło
@protocol
definiuje kilka ogólnych metod,@interface
definiuje niestandardowe metody i@implementation
implementuje ten interfejs.@interface
nie ma żadnej implementacji. Również jeślifoo
metoda jest taka sama jak metoda protokołu, więc nie należy jej powtarzać na interfejsie.W
@interface
Objective-C nie ma nic wspólnego z interfejsami Java. Po prostu deklaruje publiczny interfejs klasy, jej publiczny interfejs API. (Oraz zmienne składowe, jak już zauważyłeś). Interfejsy w stylu Java nazywane są protokołami w Objective-C i są deklarowane przy użyciu@protocol
dyrektywy. Powinieneś przeczytać The Objective-C Programming Language firmy Apple, to dobra książka - krótka i bardzo przystępna.źródło