黑马程序员——OC学习——Protocol和代理设计模式
来源:互联网 发布:斗战胜佛工艺品知乎 编辑:程序博客网 时间:2024/05/22 02:22
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 什么是protocol
protocol定义了一些方法的声明,但是不实现,类似Java中的接口,自己只声明方法,但不实现,而由遵守了协议的类去实现方法。protocol声明方法,但是不能声明变量。
协议的作用——供其他类去遵守,如果一个类遵守了一个协议,就应该实现这个协议中必须要实现的方法。
protocol的定义格式如下:
@protocol 协议名称 <NSObject>
//方法声明列表
@end
类遵守协议,类可以遵守一个协议也可以遵守多个协议:
类遵守一个协议:
@interface 类名:父类<协议名称>
//方法声明列表
@end
类遵守多个协议:
@interface 类名:父类<协议名称1,协议名称2,... >
//方法声明列表
@end
2. protocol的使用注意事项
a. 声明方法,但是不能实现
b. 某个类遵守了一个协议,就有了协议中所有方法的声明
c. 若父类遵守了某个协议,则子类也遵守
d. protocol声明的方法可以让任何类去实现
e. OC不能继承多个类但可以遵守多个协议
f. 协议可以遵守协议,一个协议遵守了另外一个协议,就可以拥有另一个协议中方法的声明
3. protocol中的方法是否必须实现
protocol中用@required 和@optional控制方法是否必须实现,@required修饰的方法必须要实现,@optional修饰的方法可实现也可不实现,OC中默认是@required
4. protocol代理设计模式
代理设计模式是通过传入的对象代替当前类完成某个功能
代理设计模式的思路:
a. 定义一个协议,里面声明代理类需要实现的方法列表
b. 创建一个代理类,遵守上面的代理协议
c. 在需要代理的类中定义一个对象,类型为id且遵守代理协议的成员变量(delegate)
d. 在需要代理的类中调用成员变量的delegate的方法,即调用代理类的方法
e. 在mian.m或其他需要使用代理类的文件中,为需要代理类的成员变量赋值
代理模式示例代码:
#import <Foundation/Foundation.h>//定义协议@protocol LookBaby <NSObject>//声明协议中的方法-(void)feedBaby;-(void)makeBabySleep;@end#import <Foundation/Foundation.h>#import "LookBaby.h"//代理类采纳协议@interface Nancy : NSObject<LookBaby>@end//代理类实现协议中的方法#import "Nancy.h"@implementation Nancy-(void)feedBaby{ NSLog(@"保姆正在喂小孩吃饭");}-(void)makeBabySleep{ NSLog(@"保姆正在哄小孩睡觉");}@end#import <Foundation/Foundation.h>#import "LookBaby.h"@class Nancy;@interface BaBy : NSObject//为Baby定义一个代理对象,该对象遵守代理协议@property (nonatomic,strong) id<LookBaby> delegate;//需要代理的类的方法声明-(void)wantEat;-(void)wantSleep;@end#import "BaBy.h"#import "Nancy.h"@implementation BaBy//调用代理的方法完成所要实现功能-(void)wantEat{ [self.delegate feedBaby];}-(void)wantSleep{ [self.delegate makeBabySleep];}@end//在main方法中实现int main(int argc, const char * argv[]) { @autoreleasepool { BaBy *baby=[BaBy new]; Nancy *nancy=[Nancy new]; baby.delegate=nancy;//给需要代理的类的对象设置代理 [baby wantEat]; [baby wantSleep]; } return 0;}
1 0
- 黑马程序员——OC学习——Protocol和代理设计模式
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 黑马程序员——10、OC语言(block、protocol和代理模式)
- 黑马程序员——protocol的基本使用和代理设计模式
- 黑马程序员——OC语言------Block、protocol协议、代理设计
- 黑马程序员——OC语言——block、protocol、代理模式
- 黑马程序员——OC语言——block、protocol、代理模式
- 黑马程序员——入学Blog05----OC的protocol与代理模式
- OC学习——OC中的@protocol(@required、@optional)、代理设计模式
- 黑马程序员——OC---protocol
- 黑马程序员——OC之protocol
- 黑马程序员——OC—block和protocol协议
- 黑马程序员——OC语法 block和protocol
- 黑马程序员——OC的Category和Protocol
- 黑马程序员员—OC(block和protocol)
- 黑马程序员——OC学习笔记07 Block 和 protocol协议。
- 黑马程序员——OC语言之代理模式
- [黑马程序员][OC]代理设计模式
- iBatis iterate标签
- UIInterfaceOrientation 设备旋转的用法 (实例) 和 IOS6屏幕旋转详解
- 一个编译静态库的make脚本
- LightOJ 1348 Aladdin and the Return Journey(树链剖分+线段树)
- Java网络编程示例
- 黑马程序员——OC学习——Protocol和代理设计模式
- fzoj Problem 2188 过河I 【BFS】
- Light oj--1148
- 九度OJ 1358:陈博的平均主义 (遍历、递归)
- Android Studio 无法关联到 svn
- bzoj1082 跨栏 二分&搜索
- 解放思想——规则和道德枷锁
- 【Html】使用表单标签,与用户交互
- 郑大校赛总结