国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS如何定義名為任意的變量詳解

2020-07-26 02:27:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

本文主要介紹了關(guān)于iOS定義名為任意的變量的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

需求說(shuō)明

在實(shí)際的編程過(guò)程中,我們總要定制一些控件,在定制的過(guò)程里,有時(shí)喜歡自己實(shí)現(xiàn)部分delegate方法

// MYScrollView.m- (instancetype)init{ ... self.delegae = self; ...}- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"%s 我被執(zhí)行", __func__); ...}

粗看上述的代碼沒(méi)什么問(wèn)題, 可是當(dāng)我們的其他對(duì)象也想實(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é)會(huì)在ViewController里的方法里在調(diào)用一下UIScrollView的方法,可以我們不知道MYScrollView自己實(shí)現(xiàn)了那些delegate方法啊,只能每個(gè)都轉(zhuǎn)發(fā)一下了.

// ViewController.m- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ [(MYScrollView *)scrollView scrollViewDidScroll:scrollView]; ...}...

這樣做是不是很累?

Objective-C是一門oop的語(yǔ)言,oop的特性有哪些呢:多態(tài).

可以用這特性去解決這一問(wèn)題:

* 在子類里重寫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í)行了.

奇巧有了,按照慣例得說(shuō)說(shuō)無(wú)益了.

嘗試寫個(gè)MYTableView.寫完后發(fā)現(xiàn),尼瑪?shù)腄ataSource的方法可以掛鉤,Delegate的卻失敗了.

// 筆者用的是tableView:cellForRowAtIndexPath: 和numberOfSectionsInTableView: 兩個(gè)方法

UITableView繼承自UIScrollView,UIScrollViewDelegate的方法卻成功了.

筆者猜測(cè)造成這樣的原因可能是UITableView內(nèi)部用的是self.delegate和_dataSource去執(zhí)行UITableView協(xié)議里的方法.

方法能不能成功,取決于我們看不到的apple的代碼,這個(gè)技巧還怎么去用呢.

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾阳县| 宜兰县| 泾阳县| 秀山| 乐昌市| 秭归县| 兖州市| 堆龙德庆县| 嫩江县| 桐城市| 缙云县| 锡林浩特市| 乌兰县| 宜兰市| 济阳县| 通山县| 龙州县| 英超| 吕梁市| 科技| 贵溪市| 泰和县| 蛟河市| 固安县| 漯河市| 瓮安县| 榆林市| 苗栗县| 双辽市| 砚山县| 梅河口市| 博罗县| 玉门市| 永仁县| 紫阳县| 宝应县| 阆中市| 府谷县| 平武县| 册亨县| 双流县|