自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

#warning 不要在category中重寫方法

移動(dòng)開發(fā)
我們可以給一個(gè)類添加方法和屬性。好比如NSDateFormatter這玩意每次都new開銷是非常大的,這在tableview中的體現(xiàn)尤為明顯,有了category我們就可以為他寫一個(gè)單例,避免了每次都為它開辟新的內(nèi)存。

[[151478]]

在iOS開發(fā)中,category(類目、類別)是一個(gè)很好用的東西。(純文字,短小而精罕)

我們可以給一個(gè)類添加方法和屬性。好比如NSDateFormatter這玩意每次都new開銷是非常大的,這在tableview中的體現(xiàn)尤為明顯,有了category我們就可以為他寫一個(gè)單例,避免了每次都為它開辟新的內(nèi)存。

于是,我們想,如果用category去重寫該類的方法,會(huì)怎樣?實(shí)測(cè)可行,果然被覆蓋了。。。但是,作為祖國未來的花朵,我們不能這么干!

理由如下:

1、category沒有辦法去代替子類,它不能像子類一樣通過super去調(diào)用父類的方法實(shí)現(xiàn)。如果category中重寫覆蓋了當(dāng)前類中的某個(gè)方法,那么這個(gè)當(dāng)前類中的原始方法實(shí)現(xiàn),將永遠(yuǎn)不會(huì)被執(zhí)行,這在某些方法里是致命的。(ps:這里提一下,+(void)load方法是一個(gè)特例,它會(huì)在當(dāng)前類執(zhí)行完之后再在category中執(zhí)行。)

2、同時(shí),一個(gè)category也不能可靠的覆蓋另一個(gè)category中相同的類的相同的方法。例如UIViewController+A與UIViewController+B,都重寫了viewDidLoad,我們就無法控制誰覆蓋了誰。

3、通過觀察頭文件我們可以發(fā)現(xiàn),Cocoa框架中的許多類都是通過category來實(shí)現(xiàn)功能的,可能不經(jīng)意間你就覆蓋了這些方法中的其一,有時(shí)候就會(huì)產(chǎn)生一些無法排查的異常原因。

4、category的誕生只是為了讓開發(fā)者更加方便的去拓展一個(gè)類,它的初衷并不是讓你去改變一個(gè)類。

結(jié)論:

要重寫方法,當(dāng)然我們首推通過子類重寫父類的方法,在一些不方便重寫的情況下,我們也可以在category中用runtime進(jìn)行method swizzling(方法的偷梁換柱)來實(shí)現(xiàn)。

責(zé)任編輯:chenqingxiang 來源: 大亮Coder 的簡書
相關(guān)推薦

2022-08-10 14:36:05

Python循環(huán)函數(shù)

2015-04-28 10:35:01

設(shè)計(jì)

2024-07-05 08:37:33

2011-01-19 12:52:49

WCF.NETC#

2023-09-27 10:19:37

類型video函數(shù)

2012-09-06 09:21:22

編程語言技術(shù)

2023-10-11 11:27:46

調(diào)試版本程序

2015-06-30 08:31:59

舊代碼重寫

2023-08-31 09:10:18

JavaScript調(diào)試

2014-08-04 15:30:39

Linux開源軟件

2019-04-15 14:05:56

MySQLUTF-8數(shù)據(jù)庫

2021-03-29 08:05:15

User項(xiàng)目安全

2015-07-27 15:27:11

程序員重寫代碼

2015-07-28 10:28:54

程序員代碼

2018-05-07 15:59:39

代碼程序員重寫

2021-03-18 23:38:26

EqualsHashcode方法

2019-11-08 13:57:53

程序員Excel軟件

2021-03-04 21:57:12

Python編程語言計(jì)算

2015-08-07 10:40:31

UI主線程

2023-03-20 11:36:28

Linux命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)