您的位置:首页 > 移动开发 > Objective-C

《Objective-C基础教程》第13章 协议

2017-10-23 11:31 381 查看

第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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c