小編給大家分享一下iOS怎么定義名為任意的變量,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

需求說明
在實(shí)際的編程過程中,我們總要定制一些控件,在定制的過程里,有時喜歡自己實(shí)現(xiàn)部分delegate方法
// MYScrollView.m
- (instancetype)init
{
...
self.delegae = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 我被執(zhí)行", __func__);
...
}粗看上述的代碼沒什么問題, 可是當(dāng)我們的其他對象也想實(shí)現(xiàn)delegate怎么辦呢?
// ViewController.m
- (void)viewDidLoad
{
...
scrollView.delegate = self;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%s 執(zhí)行了ViewController里的方法,就不執(zhí)行MYScrollView的方法了", __func__);
...
}實(shí)現(xiàn)
有的同學(xué)會在ViewController里的方法里在調(diào)用一下UIScrollView的方法,可以我們不知道MYScrollView自己實(shí)現(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其實(shí)是子類自己的myDelegate.
* 然后讓父類的delegate指向自己.在子類里實(shí)現(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的代碼,這個技巧還怎么去用呢.
以上是“iOS怎么定義名為任意的變量”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章題目:iOS怎么定義名為任意的變量-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article8/cocjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、Google、網(wǎng)站收錄、軟件開發(fā)、網(wǎng)站導(dǎo)航、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容