iOS复习笔记11:协议和代理
来源:互联网 发布:淘宝店铺怎么快速升级 编辑:程序博客网 时间:2024/05/17 03:04
一 功能
可以在协议中声明方法(不能声明变量),
某个类只要遵守这个协议,就相当于拥有协议中所有的方法声明。
父类准守协议,子类也拥有协议中的方法。
协议也可以准守另一个协议。
基协议NSObject(同时也是基类),NSObject基类也准守基协议。
基协议中包含了常用的内存管理方法:release,retain方法等。
二 定义
1 协议定义
@protocal 协议名 <NSObject>
// 声明方法
@end
2 遵守协议
2.1 类
@interface 类名 : 父类名 <协议名1, 协议名2...>
@end
2.2 协议
@protocal 协议名 <协议名1, 协议名2...>
@end
3 关键字
@required 要请实现,不实现有警告
@optional 可选实现
4 定义一个必须准守某个协议的变量
NSObject <协议名> obj1;
id <协议名> obj2;
@property (nonatomic, strong) id <协议名> p;
三 代码示例
可以在协议中声明方法(不能声明变量),
某个类只要遵守这个协议,就相当于拥有协议中所有的方法声明。
父类准守协议,子类也拥有协议中的方法。
协议也可以准守另一个协议。
基协议NSObject(同时也是基类),NSObject基类也准守基协议。
基协议中包含了常用的内存管理方法:release,retain方法等。
二 定义
1 协议定义
@protocal 协议名 <NSObject>
// 声明方法
@end
2 遵守协议
2.1 类
@interface 类名 : 父类名 <协议名1, 协议名2...>
@end
2.2 协议
@protocal 协议名 <协议名1, 协议名2...>
@end
3 关键字
@required 要请实现,不实现有警告
@optional 可选实现
4 定义一个必须准守某个协议的变量
NSObject <协议名> obj1;
id <协议名> obj2;
@property (nonatomic, strong) id <协议名> p;
三 代码示例
// MyProtocal.h@protocal MyProtocal <NSObject>- (void)protocolDefaultFun();@required // 默认值,要求实现,不实现会报警告- (void)protocolRequiredFun();@optional // 可选实现- (void)protocolOptionalFun();@end
// MulProtocal.h@protocal MulProtocal <NSObject>- (void)mulProtocolDefaultFun();@end
// Person.h#import <Foundation/Foundation.h>@protocal MyProtocal;@protocal MulProtocal;// 或者 @protocal MyProtocal, MulProtocal;// 只要一个类准遵守了一个协议,就拥有协议中声明的所有方法@interface Person : Object <MyProtocal, MulProtocal>@end
// Person.m#import "Person.h"#import "MyProtocal.h"#import "MulProtocal.h"@implementation Person <MyProtocal, MulProtocal>- (void)protocolDefaultFun(){}- (void)protocolRequiredFun(){}- (void)protocolOptionalFun(){}- (void)mulProtocolDefaultFun(){}@end
// main.m#import <Foundation/Foundation.h>#import "MyProtocal.h"#import "Person.h"int main(){// 声明一个遵守了MyProtocal的对象NSObject<MyProtocal>* obj1 = [[Person alloc] init];obj1 = nil;id<MyProtocal> obj2 = [[Person alloc] init];obj2 = nil;// return 0;}
四 代理
// ticketDelegate.h@protocol ticketDelegate <NSObject>- (int) leftTicketsNumber;@end
// Agent.h@protocol ticketDelegate;@interface Agent : NSObject <ticketDelegate>@end// Agent.m#import "Agent.h"#import "ticketDelegate.h"@implementation Agent- (int) leftTicketsNumber{return 1;}@end
// Person.h@class Agent;@class ticketDelegate;@interface Person : NSObject- (void)buyTicket;// 代理属性@property (nonatomic, retain) id <ticketDelegate> delegate;@end
// Person.m#import "Person.h"#import "Agent.h"@implementation Person- (void)buyTicket{if ( _delegate & [_delegate leftTicketsNumber] > 0){NSLog(@"buy ticket");}}@end
// main.m#import "Person.h"#import "Agent"int main(){@autopool{Person* p = [[Person alloc]init];Agent* a = [[Agent alloc] init];p.delegate = a;[p buyTicket];}return 0;}
0 0
- iOS复习笔记11:协议和代理
- ios 协议和代理
- 黑马程序员--IOS学习笔记(协议和代理)
- 论ios代理和协议
- iOS 代理-协议的代码笔记
- IOS开发之协议和代理
- IOS开发---协议和代理模式
- iOS开发之协议和代理
- IOS开发之协议和代理
- 系列:iOS开发-协议和代理
- iOS 协议代理的继承和扩展
- iOS笔记 复习Category和Extension
- iOS代理与协议
- iOS:分类、协议、代理
- iOS协议代理
- iOS 代理 协议
- ios协议 与代理
- iOS代理,协议
- 学习C++:实践者的方法(Beta1)
- Socket接收器——Acceptor
- 好久没来这里了,冒个泡
- 无法下载Android SDK及ADT解决方法
- HDU 1716 排列2
- iOS复习笔记11:协议和代理
- 算法导论 第13章 13-1 持久动态集合
- java super 深入理解
- 字符串-05. 字符串循环左移(20)
- 轻吟浅唱满目秋黄
- ios-day02-05(汤姆猫)
- MySQL JDBC驱动下载
- c#中Enum和String相互转换
- iTunes