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可以覆盖类已经存在的方法.