@interface and @protocol explanation?
An interface is where you define the attributes and operations of class. You must set out the implementation too.
A protocol is like an interface for java.
e.g.
@protocol Printing
-(void) print;
@end
can be implemented
by declaring (confusingly in the interface)
@interface Fraction: NSObject <Printing, NSCopying> {
//etc..
The confusing thing for java developers is that the curly braces {}
are not the end of the interface e.g.
@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
probably good if you take a look at this + I thought it was great help to understand
From the article:
@interface
C++
Foo.h
#ifndef __FOO_H__
#define __FOO_H__
class Foo
{
...
};
Foo.cpp
#include "Foo.h"
...
Objective-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() { ... }
}
Objective-C
@protocol MyInterface
-(void) foo;
@end
@interface Foo : NSObject <MyInterface>
{
-(void) foo {...}
...
}
@end
The @interface
in Objective-C has nothing to do with Java interfaces. It simply declares a public interface of a class, its public API. (And member variables, as you have already observed.) Java-style interfaces are called protocols in Objective-C and are declared using the @protocol
directive. You should read The Objective-C Programming Language by Apple, it’s a good book – short and very accessible.