91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS怎么定義名為任意的變量

發布時間:2021-02-18 11:00:37 來源:億速云 閱讀:157 作者:小新 欄目:移動開發

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

需求說明

在實際的編程過程中,我們總要定制一些控件,在定制的過程里,有時喜歡自己實現部分delegate方法

// MYScrollView.m

- (instancetype)init
{
 ...
 self.delegae = self;
 ...
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 NSLog(@"%s 我被執行", __func__);
 ...
}

粗看上述的代碼沒什么問題, 可是當我們的其他對象也想實現delegate怎么辦呢?

// ViewController.m
- (void)viewDidLoad 
{
 ...
 scrollView.delegate = self;
 ...
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 NSLog(@"%s 執行了ViewController里的方法,就不執行MYScrollView的方法了", __func__);
 ...
}

實現

有的同學會在ViewController里的方法里在調用一下UIScrollView的方法,可以我們不知道MYScrollView自己實現了那些delegate方法啊,只能每個都轉發一下了.

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

這樣做是不是很累?

Objective-C是一門oop的語言,oop的特性有哪些呢:多態.

可以用這特性去解決這一問題:

* 在子類里重寫delegate方法,在ViewController里調用的delegate其實是子類自己的myDelegate.

* 然后讓父類的delegate指向自己.在子類里實現的delegate方法里調用子類的delegate的方法.

// MYScrollView.m
@synthesize delegate = _myDelegate;

- (instancetype)init
{
 ...
 [super setDelegate:self];
 ...
}

// 需要掛鉤多少delegate方法就寫多少
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 NSLog(@"%s 我先執行", __func__);
 [self.delegate scrollViewDidScroll:scrollView];
}


// ViewController.m
- (void)viewDidLoad 
{
 ...
 scrollView.delegate = self;
 ...
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 NSLog(@"%s 我接著被執行了", __func__);
 ...
}

這樣子類和ViewController里的delegate方法都被執行了.

奇巧有了,按照慣例得說說無益了.

嘗試寫個MYTableView.寫完后發現,尼瑪的DataSource的方法可以掛鉤,Delegate的卻失敗了.

// 筆者用的是tableView:cellForRowAtIndexPath: 和numberOfSectionsInTableView: 兩個方法

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

筆者猜測造成這樣的原因可能是UITableView內部用的是self.delegate和_dataSource去執行UITableView協議里的方法.

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

以上是“iOS怎么定義名為任意的變量”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

麻阳| 沂源县| 高密市| 侯马市| 黄石市| 邛崃市| 临高县| 兴安县| 平原县| 常熟市| 方正县| 台中市| 疏附县| 石棉县| 姚安县| 建瓯市| 广宗县| 宁国市| 仁布县| 武威市| 武强县| 天台县| 中方县| 东乡族自治县| 和顺县| 商城县| 石嘴山市| 肇庆市| 南岸区| 汕头市| 塔城市| 澄江县| 德阳市| 德江县| 周宁县| 道真| 屏山县| 长兴县| 芷江| 达孜县| 布尔津县|