非正式协议与正式协议

在阅读一些技术博客等资料时,经常会出现非正式协议与正式协议的字眼,但是对于它的含义不太清楚,这里提出来说明一下。

正式协议

首先我们的正式协议就是指的最常用的那种@protocol的方式来命名的协议方式,主要是配合委托对象来实现代理,就是将多个类共用的方法抽取出来作为一个协议。

使用场景如下:
1.定义一个协议

//GoodStudent.h
#import <Foundation/Foundation.h>
@protocol GoodStudent <NSObject>
//默认是@required
-(void)goodAtEnglish;
@end

2.声明协议

//Student.h
#import <Foundation/Foundation.h>
#import "GoodStudent.h"
//注意实现协议的语法。
@interface Student : NSObject<GoodStudent>
@end

3.实现协议

#import "Student.h"
@implementation Student
-(id)init 
{  
  self = [super init];
  if (self) {  
      //初始化代码
  }
  return self;
}
-(void)goodAtEnglish
{   
  NSLog(@"擅长英语。。");
}
@end

非正式协议

非正式协议就是指分类,即凡是NSObject类及其子类的分类,都是非正式协议。相当于一个隐式的协议。

使用场景如下:

文件命名方式
//声明
#import <Foundation/Foundation.h>

@interface NSArray (log)

- (NSString *)description;
- (NSString *)descriptionWithLocale:(id)locale;

@end

//实现
#import "NSArray+log.h"

@implementation NSArray (log)
//一般的对象以及自定义对象调用该方法
- (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调用该方法
- (NSString *)descriptionWithLocale:(id)locale{
    NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
    
    for (NSString *str in self) {
        [strM appendFormat:@"\t%@,\n",str];
    }
    
    [strM appendString:@")"];
    return strM;

}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,588评论 25 709
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,273评论 30 472
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,696评论 33 466
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,856评论 0 9
  • 第七章 为爱,低到尘埃 上一章‖ 目录‖下一章 就在唐潇然暗暗计划怎么“对付”程曦的时候,程曦还沉浸于贺冰给的惊喜...
    梨花木三三阅读 351评论 3 4