iOS如何定義名為任意的變量詳解
前言
本文主要介紹了關(guān)于iOS定義名為任意的變量的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
需求說明
在實際的編程過程中,我們總要定制一些控件,在定制的過程里,有時喜歡自己實現(xiàn)部分delegate方法
// MYScrollView.m
- (instancetype)init
{
...
self.delegae = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 我被執(zhí)行", __func__);
...
}
粗看上述的代碼沒什么問題, 可是當(dāng)我們的其他對象也想實現(xiàn)delegate怎么辦呢?
// ViewController.m
- (void)viewDidLoad
{
...
scrollView.delegate = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 執(zhí)行了ViewController里的方法,就不執(zhí)行MYScrollView的方法了", __func__);
...
}
實現(xiàn)
有的同學(xué)會在ViewController里的方法里在調(diào)用一下UIScrollView的方法,可以我們不知道MYScrollView自己實現(xiàn)了那些delegate方法啊,只能每個都轉(zhuǎn)發(fā)一下了.
// ViewController.m
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[(MYScrollView *)scrollView scrollViewDidScroll:scrollView];
...
}
...
這樣做是不是很累?
Objective-C是一門oop的語言,oop的特性有哪些呢:多態(tài).
可以用這特性去解決這一問題:
* 在子類里重寫delegate方法,在ViewController里調(diào)用的delegate其實是子類自己的myDelegate.
* 然后讓父類的delegate指向自己.在子類里實現(xiàn)的delegate方法里調(diào)用子類的delegate的方法.
// MYScrollView.m
@synthesize delegate = _myDelegate;
- (instancetype)init
{
...
[super setDelegate:self];
...
}
// 需要掛鉤多少delegate方法就寫多少
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 我先執(zhí)行", __func__);
[self.delegate scrollViewDidScroll:scrollView];
}
// ViewController.m
- (void)viewDidLoad
{
...
scrollView.delegate = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 我接著被執(zhí)行了", __func__);
...
}
這樣子類和ViewController里的delegate方法都被執(zhí)行了.
奇巧有了,按照慣例得說說無益了.
嘗試寫個MYTableView.寫完后發(fā)現(xiàn),尼瑪?shù)腄ataSource的方法可以掛鉤,Delegate的卻失敗了.
// 筆者用的是tableView:cellForRowAtIndexPath: 和numberOfSectionsInTableView: 兩個方法
UITableView繼承自UIScrollView,UIScrollViewDelegate的方法卻成功了.
筆者猜測造成這樣的原因可能是UITableView內(nèi)部用的是self.delegate和_dataSource去執(zhí)行UITableView協(xié)議里的方法.
方法能不能成功,取決于我們看不到的apple的代碼,這個技巧還怎么去用呢.
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
利用iOS開發(fā)實現(xiàn)翻轉(zhuǎn)撲克牌動畫的方法
這篇文章主要給大家介紹了關(guān)于利用iOS開發(fā)實現(xiàn)翻撲克牌動畫的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
IOS開發(fā) UIAlertController詳解及實例代碼
這篇文章主要介紹了 IOS開發(fā) UIAlertController詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2016-12-12
基于ios逆向過程中l(wèi)ldb調(diào)試技巧(推薦)
下面小編就為大家?guī)硪黄趇os逆向過程中l(wèi)ldb調(diào)試技巧(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07

