OC 30 day
第一次打開 objc 的文件,看到了一個關鍵字 @interface
先看看wiki怎麼說吧:
interface :
定義部分,清楚定義了類的名稱、成員變數和方法。 以關鍵字@interface作為開始,@end作為結束。
[color=#d2ed28] In object-oriented programming, a protocol or interface is a common means for unrelated objects to communicate with each other. These are definitions of methods and values which the objects agree upon in order to cooperate.
接口約定了對象間交互的屬性和方法,使得對象間無需了解對方就可以協作。
Objective-C中強制要求將類的定義(interface)與實現(implementation)分為兩個部分。
類的定義檔案遵循C語言之慣例以.h為字尾,實現檔案以.m為字尾。
這也就是為什麼我們在Objc裡看到.h .m 的文件。
對比@interface和@implementation
@interface 我們干過的事:
1、繼承
2、聲明協議
3、定義實例變量(@interface後面加大括號那種)
4、定義@property
5、聲明方法
@implementation 我們干過的和可以幹的事:
1、繼承
2、定義實例變量
3、合成屬性(@synthesize和@dynamic)
4、實現方法(包括協議方法)
定義部分,清楚定義了類的名稱、成員變數和方法。 以關鍵字@interface作為開始,@end作為結束。
@interface MyObject : NSObject {
int memberVar1; // 实体变量
id memberVar2;
}
+(return_type) class_method; // 类方法
-(return_type) instance_method1; // 实例方法
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
@end
方法前面的 +/- 號代表函式的類型:加號(+)代表類別方法(class method),不需要實例就可以呼叫,與C++ 的靜態函式(static member function)相似。減號(-)即是一般的實例方法(instance method)。
實現區段則包含了公開方法的實現,以及定義私有(private)變數及方法。 以關鍵字@implementation作為區段起頭,@end結尾。
@implementation MyObject {
int memberVar3; //私有實體變數
}
+(return_type) class_method {
.... //method implementation
}
-(return_type) instance_method1 {
....
}
-(return_type) instance_method2: (int) p1 {
....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {
....
}
@end
值得一提的是不只Interface區段可定義實體變數,Implementation區段也可以定義實體變數,兩者的差別在於存取權限的不同,Interface區段內的實體變數默認權限為protected,宣告於implementation區段的實體變數則默認為private,故在Implementation區段定義私有成員更符合物件導向之封裝原則,因為如此類別之私有資訊就不需曝露於公開interface(.h檔案)中。
是和調用者的一個protocol,沒錯,就是protocol。
看過不少代碼,從@interface設計上多少就能看出作者的水平,分享下我對於這個問題的一些拙見。
// Sark.h
@interface SarkViewController : NSObject <NSXMLParserDelegate /*1*/, NSCopying> {
NSString *_name; // 2
IBOutlet UITextField *_nameTextField; // 2
}
@property (nonatomic, strong) NSXMLParser *parser; // 3
- (IBAction)nameChangedAction:(id)sender; // 4
@end
個interface出現的問題:
原文網址:https://kknews.cc/culture/n5zr2x3.html