objective-c是一門主要用於Apple's Mac OS X and iOS的面向對象編程語言.也是用於Apple Cocoa API的主要語言.本系列教程覆蓋了objective-c的一些特定內容,包括:類,方法和內存管理.
本節原文地址
Protocol
objective-c 裏的protocol和JAVA裏的interface相似.
首先在頭文件裏定義一個protocol:
@protocol StringUtils
-(void) outputString;
@optional
-(void) outputOptionalString;
@required
-(void) outputString2;
@end
"@optional"定義了一些可選的方法;
"@required"定義了所有必須實現的方法.
擴展協議:
@protocol TextUtils < StringUtils, CharUtils >
定義一個接口用於支持該協議(適配協議)
#import "StringUtils.h"
@interface MyString: NSObject <StringUtils, SomeOtherProtocol> {
...
}
...
@end
代碼實現:
#import "MyString.h"
@implementation MyString
...
-(void) outputString {
...
}
-(void) outputString2 {
...
}
...
@end
確認一個對象是否支持該協議:
[obj1 conformsToProtocol:@protocol(StringUtils)]
聲明一個用於確認是否支持該協議的對象:
MyString <StringUtils> *obj1;
id <StringUtils> *obj2
Category
objective-c的Category是在不擴展類的情況下給一個已經存在的類增加方法.這將會允許增加一個方法給已經存在的類.例如,添加一個新的validation方法構建NSString類.
#import <Cocoa/Cocoa.h>
@interface NSString (Validation)
- (BOOL) isPhoneNumber;
@end
#import "NSString-Validation.h"
@implementation NSString (Validation)
- (BOOL) isPhoneNumber
{
...
}
@end
注:
1.Category不能增加新的實例變量.
2.Category可以覆蓋類已經存在的方法.