协议
Posted 这波lucio来全学了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协议相关的知识,希望对你有一定的参考价值。
第13章 协议
13.1 正式协议
与非正式协议一样,正式协议包含了方法和属性的有名称列表。
不同的是,正式协议要求显式地采用(在@interface声明中列出协议的名称)
采用协议之后,类就要遵守该协议,实现该协议的所有方法
13.1.1 声明协议
@protocol NSCopying
-(id) copyWithZone:(NSZone *) zone;
@end
继承父协议
@protocol MySuperDuberProtocol <MyparentProtocol>
-(void)....//需要实现的方法
@end
通常可以使用NSObject作为根协议(不要将其与NSObject类混淆)NSObject类复合NSObject协议,这意味着所有的对象都符合NSObject协议
13.1.2 采用协议
@interface Car:NSObject<NSCopying,NSCoding>
// instance variables
//methods
@end //Car
13.2 协议和数据类型
可以在数据类型中为实例变量和方法参数制定协议名称,有助于检查代码中的错误。
-(void)setObjectValue:(id<NSCopying>)object;
编译器将知道setObjectValue:接受任意类型的对象作为参数,但前提是要遵守该协议。否则会发生告警。
13.3 Objective-C 2.0 的新特性
@optional
-(void)...//不一定要实现
@required
-(void)...//一定要实现
非正式协议已经被替换成带有@optional方法的正式协议。
13.4 委托方法
委托(delegation)是一个经常与协议共用的特性。委托就是某个对象指定另一个对象处理某些特定任务的设计模式。
使用委托来执行相应方法时,代码首先询问委托是否拥有这个方法的实现,如果实现了,它就会要求委托处理这个方法。
示例
A.h
@protocol Mydelegate//协议的声明
-(void)Fun;
@end
@interface A:NSObject
id<Mydelegate> delegate;//声明一个委托对象,我们要把事情委托给实现Mydelegate协议的类
@property(assign,nonatomic) id<Mydelegate> delegate;
@end
A.m
@implementation
-(void)init
delegate = B;
-(void)FunToOther
[delegate Fun];//将消息发送给委托去处理
@end
委托对象的实现
B.h
#import"A.h"
@interface B:NSObject<MyDelegate>
@end
B.m
@implementation
-(void)fun
//实现Mydelegate中制定的方法
@end
以上是关于协议的主要内容,如果未能解决你的问题,请参考以下文章
一个网页从输入URL到页面加载完成的过程中都发生了什么事情?