iOS開發之protocol和delegate
protocol——協議
協議是用來定義物件的屬性,行為和用於回撥的。
協議中有兩個關鍵字@private和@optional,@private表示使用這個協議必須要寫的方法,@optional表示可選的方法,用不到可以不寫。
就像UITableView,它有兩個協議:UITableViewDelegate和UITableViewDataSource,UITableViewDelegate是規定行為操作的,裡面的方法都是可選的方
法,UITableViewDataSource是規定資料儲存結構的,有兩個必選方法。因此你再實現UITableViewDataSource時必須要定義這兩個方法,否則程式會出錯。
如果你使用了響應的類或者控制元件,如果該類定義了協議,就可以根據需要實現該協議。
protocol和java裡interface的概念類似,是Objective-C語法的一部分。
定義protocol如下
[cpp] view plain copy print?
@protocol ClassADelegate
- (void)methodA;
- (void)methodB;
@end
那麼就是定義了一組函式,這組函式放在一起叫作一個protocol,也就是協議。
函式是需要被實現的,所以如果對於class如下
[cpp] view plain copy print?
@interface ClassB {
}
@end
就叫作ClassB conform to protocol ClassADelegate,也就是說ClassB實現了這個協議,
也就是實現了這一組函式。
有了上面這個標頭檔案,我們就可以放心作呼叫
[cpp] view plain copy print?
ClassB *b = [[ClassB alloc] init];
[b methodA];
[b methodB];
而不用擔心出現unrecognized selector sent to instance這種錯誤了。
所以protocol就是一組函式定義,是從類宣告中剝離出來的一組定義。
[cpp] view plain copy print?
id b = …;
[b methodA];
這種用法也常見,b是一個id型別,它知道ClassADelegate這組函式的實現。
delegate——委託,代理
適用場合:類A呼叫類B, 當類B想回撥類A的方法的時候, 要用到delegate
要理解下面的程式碼的話, 要知道的一個知識點是 協議(protocal)
檔案:ClassA.h
import
import “ClassB.h”
@interface ClassA : NSObject
- (void)test;
@end
檔案:ClassA.m
import “ClassA.h”
@implementation ClassA
-(void)test{
ClassB *classB = [[ClassB alloc] init];
classB.delegate = self;
[classB actionOfClassB];
}
-(void)callback{
NSLog(@”這個方法會被類B呼叫”);
}
@end
檔案:ClassB.h
import
import “ClassB.h”
@implementation ClassB
@synthesize delegate;
-(void)actionOfClassB{
[delegate callback];
}
@end
相關文章
- 窺探Swift之協議(Protocol)和委託代理(Delegate)回撥的使用Swift協議Protocol
- c#之delegate和eventC#
- iOS開發中不想用delegate協議方法怎麼辦?iOS協議
- Ios8之後, 定位的delegate不能觸發的問題iOS
- iOS開發之NavBar和TarBar使用技巧iOS
- c#之delegateC#
- iOS 開發之— NSURLProtocoliOSProtocol
- iOS開發之WebViewiOSWebView
- iOS開發之GCDiOSGC
- iOS開發庫之(四):工程和庫聯調iOS
- iOS開發系列--Objective-C之類和物件iOSObject物件
- iOS之Wifi開發探究iOSWiFi
- iOS開發之逆向工程iOS
- iOS開發之避免crashiOS
- iOS開發之Core AnimationiOS
- iOS中使用Protocol BufferiOSProtocol
- IOS學習之一個示例弄懂代理(delegate)和協議iOS協議
- iOS 開發之 NSURLSession 下載和斷點續傳iOSSession斷點
- [iOS] 從 application delegate 引申三點iOSAPP
- Elasticsearch和亞馬遜之間的衝突 - protocolElasticsearch亞馬遜Protocol
- Protocol buffer---Protobuf3開發指南Protocol
- iOS開發之FuckingBlockSyntax!iOSBloC
- iOS開發之 Autolayout 詳解iOS
- iOS開發之XLForm的使用iOSORM
- iOS開發之網路篇iOS
- IOS開發之sqlite框架FMDBiOSSQLite框架
- iOS開發之UICollectionViewDataSourcePrefetchingiOSUIView
- iOS開發之新浪圍脖iOS
- iOS開發之遠端推送iOS
- iOS開發之微信山寨版iOS
- iOS開發之CocoaLumberjackiOS
- iOS開發之玩轉字串iOS字串
- iOS開發之彈窗管理iOS
- [譯] Jquery中 .bind() .live() .delegate() 和 .on() 之間的區別jQuery
- 深度解析 Delegate 和 Notification 和 KVO
- iOS開發之字串轉圖片iOS字串
- iOS開發之Crash分析,以及收集iOS
- ionic開發環境搭建之ios開發環境iOS