您的位置:首页 > 其它

蓝懿教育记录

2015-09-15 06:47 225 查看
今天复习了协议的内容
理论:

什么是协议:协议就是规则,定义一个协议相当于制定规则。

OC中类可以遵守协议,遵守了一个协议的类相当于拥有了一种能力。

@protocol 协议名

     @required 声明必须遵守的属性和方法

     @optional 声明可选(可以)遵守的属性和方法

     默认@required

@end

一个类遵守一个协议

     a.@interface 类名(分类类名):父类名<协议名>

     b.实现协议中声明的方法

协议的继承

     协议的继承相当于协议的合并。

@protocol MyProtocalB<MyProtocalA>

     -(void)learn;

@end

一个类可以同时遵守多个协议,协议之间使用“,”分隔符分开。

@interface Student:

     NSObject<MyProtocolX,MyProtocolY>

协议参数

可以让某个参数为id类型但是要遵循某个协议,这样可以对参数加以限制。

比如一个方法需要一个任意类型的对象,但是要求对象必须有某个方法的时候。参数类型如下:

-(void)方法名参数介绍:(id<协议名称>obj;

例如:-(void)DanceWithObject:(id<DanceDelegate>)obj;

协议返回值类型

+(id<ButtonProtocol>)createByNum:(int)num

{

     switch(num)

     {

          case 1:

                    return [[LoginButton alloc]init];

          case 2:

                    return [[RegiterButton alloc]init];

     }

     return nil;

}

协议选择器

     -协议的引用指向一个协议

          Protocol *p = @protocol(NSCopying);

     -可以判断一个类是否遵循了某个协议

     BOOL b = [Student conformsToProtocol:p];

1、协议用到的情况:某个类有一个实例方法,这个实例方法对所传过来的对象,限制其必须实现了某个特定的方法,而对传过来的对象类型没有限制。

2、格式

协议名:@protocol 协议名      协议名命名一般:类名+Delegate。

协议内容:特定的某方法

具体举例:



Aa类中得实例方法是具有协议限制的。

Bb类是一个普通类。



Aa.h中:

//协议写法 

@protocol AaDelegate <NSObject>

//协议内容

-(void)play;

@end

@interface Aa :NSObject

//传染的对象 遵守协议

-(void)playWithObject:(id<AaDelegate>)anyobject;

@end

Aa.m中写好带协议的实例方法

-(void)playWithObject:(id<AaDelegate>)anyobject{

    [anyobjectplay];

}



当在ViewController中引入Aa Bb 类。

分别创建对象。Aa 类对象,调用实例方法把Bb类对象传入时报警告:要求Bb 类对象必须遵守Aa 类中实例方法的协议。

需要在Bb类的Bb.h:

引入协议所在类

#import"Aa.h"

让Bb类遵守协议:

@interface Bb :NSObject<AaDelegate>

在Bb.h中实现协议内容。

需要注意的方面:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: