您的位置:首页 > 职场人生

黑马程序员——protocol的基本使用和代理设计模式

2015-01-01 12:30 573 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、protocol的用途

    1)用来声明方法(不能声明成员变量)

    2)遵守这个协议的类,相当于拥有这个协议中所有的方法声明

    3)子类能够继承父类遵守的协议

2、protocol的书写格式 和 遵守protocol的类的书写格式

协议书写格式:
@protocol 协议名称 <NSObject>
// 方法声明列表....
@end

注意:<NSObject> 为本协议遵守的协议,也可以换成其它协议。一个协议遵守另外的协议,就相当于拥有了那个协议的所有方法的声明。<NSObject>是任何协议和类都要继承(或间接继承)的协议被称为基协议。

遵守协议的书写格式:
@interface ClassName : FatherClass <protocol1, protocol2>

@end


3、协议中声明方法类型的两种关键字

@required //  默认,要求实现,如果没有实现,会发出警告(只是警告,不会报错)

@optional //  不要求实现,是否实现都不会有警告


4、限制生成的对象变量 / 声明类中的成员对象  遵守某个协议

        a)声明类中的成员对象遵守协议
//  @property (nonatomic, strong) 类名<协议名称> *属性名;
@property (nonatomic, strong) Dog<MyProtocol> *dog;

//  @property (nonatomic, strong) id<协议名称> 属性名;
@property (nonatomic, strong) id<MyProtocol> dog2;


        b)限制生成的对象变量遵守协议
// 类名<协议名称> *变量名;
NSObject<MyProtocol> *obj;

// id<协议名称> 变量名;
id<MyProtocol> obj2;

5、代理设计模式

设计了一个最小化“代理模式”例程:
//
//  Helpprotocol.h
//

#import <Foundation/Foundation.h>

@protocol Helpprotocol <NSObject>

- (void)paotui;

@end

//
//  Man.h
//

#import <Foundation/Foundation.h>
#import “Helpprotocol.h"

@interface Man : NSObject

- (void)jiaorenpaotui;

@property (nonatomic, strong) id<Helpprotocol> somehelper;

@end

//
//  Man.m
//
#import "Man.h"

@implementation Man

- (void)jiaorenpaotui
{
[_somehelper paotui];
}

@end

//
//  Helper.h
//

#import <Foundation/Foundation.h>
#import “Helpprotocol.h"

@interface Helper : NSObject <Helpprotocol>

@end

//
//  Helper.m
//

#import “Helper.h"

@implementation Helper

- (void)paotui
{
NSLog(@"pao tui wan cheng!");
}

@end

//
//  main.m
//

#import <Foundation/Foundation.h>
#import "Man.h"
#import “Helper.h"

int main()
{
Man *man1 = [[Man alloc] init];
Helper *helper1 = [[Helper alloc]init];

man1.somehelper = helper1;
[man1 jiaorenpaotui];

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息