@interface和@protocol解释?

时间:2009-11-05 08:38:35

标签: objective-c

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

3 个答案:

答案 0 :(得分:81)

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

协议就像java的接口。

e.g。

@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

答案 1 :(得分:24)

如果你看一下this +,我认为这很有帮助

来自文章:

<强> @interface

C ++

foo.h中

#ifndef __FOO_H__
#define __FOO_H__
class Foo
{
...
};

Foo.cpp中

#include "Foo.h"
...

目标C

foo.h中

@interface Foo : NSObject
{
...
}
@end

Foo.m

#import "Foo.h"

@implementation Foo
...
@end

<强> @protocol

C ++

struct MyInterface
{
  void foo() = 0;
}

class A : MyInterface
{
public:
  void override foo() { ... }
}

目标C

@protocol MyInterface
-(void) foo;
@end

@interface Foo : NSObject <MyInterface>
{
 -(void) foo {...}
...
}
@end

答案 2 :(得分:13)

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