IOS开发protocol使用
来源:互联网 发布:c语言中变量命名规则 编辑:程序博客网 时间:2024/05/29 02:17
1.什么是protocol?
protocol(协议)是用来定义对象的属性和行为,用于回调。
2.protocol分类?
协议中有三个修饰关键字@required和@optional和@property。
3.三个修饰关键字的作用
被@required修饰的方法为必须实现的方法;
被@optional修饰的方法为可选实现的方法;
@property用于修饰属性。
一、定义一个protocol
新建文件的时候不要选择objective-c Class;而要选择objective-c protocol。
#import <Foundation/Foundation.h>@protocol ClassADelegate <NSObject>@required//必须实现- (void)methodA;@optional//可选实现- (void)methodB;@propertyNSString *_str;@end
二、定义protocol的实现(只是定义,对外宣称自己实现了)
A.创建一个objective-c Class,在头文件中实现 ClassADelegate。
#import <Foundation/Foundation.h>#import "ClassADelegate.h"@interface ClassA : NSObject <ClassADelegate>@end
3.调用protocol中的方法(类似Java中调用interface中的方法)
#import "ViewController.h"#import "ClassA.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; ClassA *a = [[ClassA alloc] init]; [a methodA]; [a methodB];}4.运行程序,发现报错
ProtocolAndDelegate[373:60b] -[ClassA methodA]: unrecognized selector sent to instance 0x17001dff0原因分析:在第二步里面,只是定义了实现,为真正实现。
在ClassA.m文件的顶部会有警告提示:
Method 'methodA' in protocol not implemented
methodB被@optional修饰,是可选实现,所有没有警告提示;但是运行的时候依然会报错。
5.真正实现协议中的方法
#import "ClassA.h"@implementation ClassA - (void)methodA{ NSLog(@"ClassA methodA exec");}- (void)methodB{ NSLog(@"ClassA methodB exec");}@end
6.再次运行程序
2014-09-25 14:27:17.751 ProtocolAndDelegate[380:60b] ClassA methodA exec2014-09-25 14:27:17.752 ProtocolAndDelegate[380:60b] ClassA methodB exec
7.respondsToSelector容错处理
协议中的方法如果没有被真正实现,程序是可以编译通过的,但是在运行的时候会出错。特别的是可选实现的方法,未被真正实现的可能性极高,直接调用protocol方法出错的可能性极高。
规定:“出席今天的宴会,可以打领带,也可以不打领带”绅士打了领带;屌丝为打领带。此时如果直接去所有赴宴者领带上的花纹,就会出现异常。先判断下这个赴宴者有没有打领带,如果有再获取领带上的花纹。
处理办法如下:
- (void)viewDidLoad{ [super viewDidLoad]; ClassA *a = [[ClassA alloc] init]; if ([a respondsToSelector:@selector(methodA)]) { [a methodA]; } if ([a respondsToSelector:@selector(methodB)]) { [a methodB]; }}
0 0
- IOS开发protocol使用
- iOS开发-protocol buffer的使用
- IOS开发之protocol
- ios开发之Protocol
- IOS protocol 的使用
- IOS开发之——Protocol协议的使用
- iOS开发之 协议 protocol
- iOS protocol buffer的使用
- iOS开发之protocol和delegate
- [iOS开发必备知识之] Category & Protocol
- iOS开发之protocol和delegate
- iOS开发之protocol和delegate
- IOS开发---OC语言-㉚protocol协议
- iOS开发之protocol和delegate
- iOS开发之protocol和delegate
- IOS开发笔记22-block与@protocol
- iOS开发之protocol和delegate
- iOS开发之protocol和delegate
- iOS8注册通知 push、notification
- Linux下Java环境变量配置
- JQuery加载更多插件
- Ubuntu14.04下安装Hadoop2.4.0 --- 单机模式
- 堆和栈究竟有什么区别?
- IOS开发protocol使用
- hadoop-eclipse-2.5.1.jar的编译
- java 定时任务
- OPENCV初体验
- Android应用源码之仿网易客户端源码效果
- 常被设计成单例的场景
- android TextView 字体设置
- Hibernate session 获取方式浅谈
- 软考进行时——面向过程设计VS面向对象设计