iOS 協議的繼承和擴充套件
參考文章:http://blog.csdn.net/u011363981/article/details/71499742
概述
在實際需求中,我們經常遇到需要擴充套件父類協議的情況,例如,當我們需要封裝一個擁有上拉載入和下拉重新整理功能的tableView時,我們希望擴充套件UITableViewDelegate中的方法,增加上拉載入和下拉重新整理的兩個回撥,這時我們就需要繼承UITableView的協議,並擴充套件兩個協議方法
實現
.h
#import <UIKit/UIKit.h>
@protocol TCTableViewDelegate <NSObject,UITableViewDelegate>
@end
@protocol TCTableViewDataSource <NSObject,UITableViewDataSource>
@end
@interface TCTableView : UITableView
@property (nonatomic, weak) id <TCTableViewDelegate> delegate;
@property (nonatomic, weak) id <TCTableViewDataSource> dataSource;
@end
.m
#import "TCTableView.h"
@implementation TCTableView
@dynamic delegate;
@dynamic dataSource;
@end
注意
當我們只實現了以下程式碼時
.h
#import <UIKit/UIKit.h>
@protocol TCTableViewDelegate <NSObject>
@end
@protocol TCTableViewDataSource <NSObject>
@end
@interface TCTableView : UITableView
@property (nonatomic, weak) id <TCTableViewDelegate> delegate;
@property (nonatomic, weak) id <TCTableViewDataSource> dataSource;
@end
會有兩個警告
1.第一個警告是因為delegate與父類中的屬性名衝突了,不做特殊處理的話,實現時會直接拿父類的的delegate,這樣的話這個delegate屬性就沒有遵循子類中的TCTableViewDelegate協議,在子類協議中的方法是無法被呼叫的
解決方案:
#import "TCTableView.h"
@implementation TCTableView
@dynamic delegate;
@dynamic dataSource;
@end
在.m檔案中用@dynamic關鍵字修飾delegate屬性,此關鍵字會阻止系統自動建立setter和getter方法,這樣就不會遵循系統邏輯直接去拿父類的delegate的實現了
更多關於@dynamic
2.第二個警告是因為子類沒有繼承父類的協議
解決方案:
@protocol TCTableViewDelegate <NSObject,UITableViewDelegate>
利用OC中協議可以多繼承的特性,使TCTableViewDelegate也繼承自UITableViewDelegate
相關文章
- iOS分類(category)、類擴充套件(extension)、繼承的區別iOSGo套件繼承
- 開源 | SOFAMesh 的通用協議擴充套件協議套件
- OAuth 2.0 擴充套件協議之 PKCEOAuth套件協議
- Swift---協議和擴充套件、 錯誤處理、泛型Swift協議套件泛型
- Swift 核心動畫 面向協議 擴充套件封裝Swift動畫協議套件封裝
- swift學習筆記4——擴充套件、協議Swift筆記套件協議
- iOS 通知擴充套件iOS套件
- ios UIcolor擴充套件iOSUI套件
- 擴充套件類的三種方式(繼承,裝飾模式,動態代理)套件繼承模式
- iOS開發的分類和擴充套件iOS套件
- MOSN 多協議擴充套件開發實踐協議套件
- Swift列舉,結構體,類,擴充套件,協議Swift結構體套件協議
- Silverlight頁面通過繼承擴充套件實現繼承套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【譯】 WebSocket 協議第九章——擴充套件(Extension)Web協議套件
- 一種MODBUS RTU擴充套件串列埠通訊協議套件串列埠協議
- 給iOS開發AIR原生擴充套件的20條建議iOSAI套件
- weex ios擴充套件類的作用iOS套件
- iOS中擴充套件機制Category和associativeiOS套件Go
- JMeter 擴充套件外掛實現對自定義協議的支援JMeter套件協議
- 螞蟻金服開源的 SOFAMesh 的通用協議擴充套件解析協議套件
- iOS 通知擴充套件外掛iOS套件
- SOFAMesh中的多協議通用解決方案x-protocol介紹系列(3)——TCP協議擴充套件協議ProtocolTCP套件
- php7安裝redis擴充套件和memcache擴充套件PHPRedis套件
- iOS 推送通知及推送擴充套件iOS套件
- IOS setOnclick - 點選事件完美擴充套件iOS事件套件
- 乾貨丨如何水平擴充套件和垂直擴充套件DolphinDB叢集?套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- 跨鏈協議:擴充套件區塊鏈行業應用的生態邊界協議套件區塊鏈行業
- PHPmemcache和memcached擴充套件的區別PHP套件
- UNDO SEGMENT的擴充套件和收縮套件
- 聊聊iOS中的多繼承和多重代理iOS繼承
- Scale-up(縱向擴充套件)和Scale-out(橫向擴充套件)套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- iOS Extension擴充套件開啟宿主應用iOS套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 安裝Swoole框架和擴充套件框架套件
- 位擴充套件和位截斷套件