美文网首页
非正式协议与正式协议

非正式协议与正式协议

作者: Magic_小杜 | 来源:发表于2017-09-25 17:52 被阅读76次

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

正式协议

首先我们的正式协议就是指的最常用的那种@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

相关文章

  • iOS设计模式 (七) 协议模式

    非正式协议 非正式协议就是类别,即凡是NSObject或其子类的类别,都是非正式协议。 协议(protocol) ...

  • 协议protocol

    一、 非正式协议 非正式协议就是类别,即凡是NSObject或其子类的类别,都是非正式协议。 二、协议(proto...

  • 非正式协议与正式协议

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

  • 正式协议与非正式协议区别

    这两个概念困扰我很久了,一直都很像搞清楚到非正式协议和正式协议有什么区别和联系,下面结合网上的资料和自己的看法谈谈...

  • 非正式协议及普通类别,类扩展

    一、非正式协议 所谓非正式协议就是类别,即凡是NSObject或其子类的类别。 如:NSObject+run,但是...

  • iOS [NSArray array] 和 [[NSArray

    alloc (内存分配)以及init(初始化) Objective-C 协议分为非正式协议和正式协议。 这两个方式...

  • Cocoa Core Competencies (Cocoa的核

    非正式协议 An informal protocol is a category onNSObject, whic...

  • KVO---NSKeyValueObserving

    The NSKeyValueObserving (KVO) informal protocol[非正式协议] de...

  • oc - KVC的理解

    KVC 键值编码协议 即NSKeyValueCoding协议,是NSObject的一个非正式协议。它的作用是我们...

  • iOS 非正式协议

    很多博客文章[https://blog.csdn.net/csdn_liuzongyi/article/detai...

网友评论

      本文标题:非正式协议与正式协议

      本文链接:https://www.haomeiwen.com/subject/lcedextx.html