@interface和@protocol解释?

Roc*_*ker 75 objective-c

我想知道目标C中的@interface是什么?它只是程序员想要声明变量,类名或方法名称的地方......?我不确定它是否像Java中的界面.关于目标C中的@protocol也是如此.它看起来像Java中的界面更多.请问有谁能给我详细解释.我真的很感激.

Joh*_*lan 87

您可以在界面中定义类的属性和操作.您也必须列出实施.

协议就像java的接口.

例如

@protocol Printing
    -(void) print;
@end
Run Code Online (Sandbox Code Playgroud)

可以实施

通过声明(在界面中容易混淆)

@interface Fraction: NSObject <Printing, NSCopying> {
//etc..
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

  • @QuinnTaylor我不想说'Java做得更好',但是我这样说,因为OP提出了与Java语言有关的问题. (21认同)
  • 总体而言,这是一个非常好的解释,但有点偏向于Java认为它是"更好"的方式.与许多事情一样,术语与语言有关.它有助于记住Objective-C早于Java,Java从中吸取了相当多的东西,包括协议接口的概念.http://www.virtualschool.edu/objectivec/influenceOnJava.html如果Java保留了相同的名称,它可能会更少混淆,但它们没有,因为Java没有单独的.h文件(在C中)/C++)包含编译单元的"接口". (10认同)
  • 仅从Objective C的角度来看,两者之间有什么区别?两者似乎都强制某些方法由基于它们形成的类实现。唯一的区别是协议是*无类*的,而接口需要实现吗? (2认同)

And*_*rsK 26

如果你看看这个可能很好+我觉得这很有帮助

来自文章:

@接口

C++

foo.h中

#ifndef __FOO_H__
#define __FOO_H__
class Foo
{
...
};
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include "Foo.h"
...
Run Code Online (Sandbox Code Playgroud)

Objective-C的

foo.h中

@interface Foo : NSObject
{
...
}
@end
Run Code Online (Sandbox Code Playgroud)

Foo.m

#import "Foo.h"

@implementation Foo
...
@end
Run Code Online (Sandbox Code Playgroud)

@协议

C++

struct MyInterface
{
  void foo() = 0;
}

class A : MyInterface
{
public:
  void override foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)

Objective-C的

@protocol MyInterface
-(void) foo;
@end

@interface Foo : NSObject <MyInterface>
{
 -(void) foo {...}
...
}
@end
Run Code Online (Sandbox Code Playgroud)

  • +1很棒的资源.几乎是每个C/C++程序员在进入Objective-C领域时的首选指南. (2认同)

zou*_*oul 14

@interface在Objective-C无关的Java接口.它只是声明一个类的公共接口,它的公共API.(正如您已经观察到的那样,成员变量.)Java样式的接口在Objective-C中称为协议,并使用该@protocol指令声明.您应该阅读Apple 的Objective-C编程语言,这是一本很好的书 - 简短且易于访问.