在閱讀一些技術(shù)博客等資料時(shí)寥枝,經(jīng)常會(huì)出現(xiàn)非正式協(xié)議與正式協(xié)議的字眼渴丸,但是對(duì)于它的含義不太清楚,這里提出來說明一下彤灶。
正式協(xié)議
首先我們的正式協(xié)議就是指的最常用的那種@protocol的方式來命名的協(xié)議方式旷太,主要是配合委托對(duì)象來實(shí)現(xiàn)代理展懈,就是將多個(gè)類共用的方法抽取出來作為一個(gè)協(xié)議。
使用場(chǎng)景如下:
1.定義一個(gè)協(xié)議
//GoodStudent.h
#import <Foundation/Foundation.h>
@protocol GoodStudent <NSObject>
//默認(rèn)是@required
-(void)goodAtEnglish;
@end
2.聲明協(xié)議
//Student.h
#import <Foundation/Foundation.h>
#import "GoodStudent.h"
//注意實(shí)現(xiàn)協(xié)議的語法供璧。
@interface Student : NSObject<GoodStudent>
@end
3.實(shí)現(xiàn)協(xié)議
#import "Student.h"
@implementation Student
-(id)init
{
self = [super init];
if (self) {
//初始化代碼
}
return self;
}
-(void)goodAtEnglish
{
NSLog(@"擅長英語存崖。。");
}
@end
非正式協(xié)議
非正式協(xié)議就是指分類睡毒,即凡是NSObject類及其子類的分類来惧,都是非正式協(xié)議。相當(dāng)于一個(gè)隱式的協(xié)議演顾。
使用場(chǎng)景如下:
文件命名方式
//聲明
#import <Foundation/Foundation.h>
@interface NSArray (log)
- (NSString *)description;
- (NSString *)descriptionWithLocale:(id)locale;
@end
//實(shí)現(xiàn)
#import "NSArray+log.h"
@implementation NSArray (log)
//一般的對(duì)象以及自定義對(duì)象調(diào)用該方法
- (NSString *)description{
NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
for (NSString *str in self) {
[strM appendFormat:@"\t%@,\n",str];
}
[strM appendString:@")"];
return strM;
return @"aaaa";
}
//NSArray和NSDictionary調(diào)用該方法
- (NSString *)descriptionWithLocale:(id)locale{
NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
for (NSString *str in self) {
[strM appendFormat:@"\t%@,\n",str];
}
[strM appendString:@")"];
return strM;
}
@end