Category真的那么靠譜嗎?

Category是我們?cè)谄匠懘a時(shí)玫霎,必然會(huì)使用到的一種技術(shù),它有諸多好處:

  1. 將一個(gè)很大的類拆分成相對(duì)獨(dú)立的功能類
  2. 替換原來的函數(shù)
    ....

例如:

@interface XPMainViewController (AutoLogin)

- (void)autoLogin;

@end

@interface XPMainViewController (SyncConfig)

- (void)syncRemoteConfig;

@end

看起來Category真的非常不錯(cuò)拔创,可以幫我們模塊化
清晰化我們的代碼,但是它真的靠譜嗎富蓄?我們來驗(yàn)證一下剩燥。

首先,我們先創(chuàng)建一個(gè)NSURLSessionTask的Category:

@interface NSURLSessionTask (Test)

- (NSString*)testName;

@end

@implementation NSURLSessionTask (Test)

- (NSString*)testName {
    return @"test";
}

@end

Category很簡(jiǎn)單格粪,就是給NSURLSessionTask增加了一個(gè)叫testName的函數(shù)躏吊!

然后我們來調(diào)用一下試試:

NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
NSLog(@"%@",[task testName]);

代碼寫到這,我們滿懷信心的Commnd+r帐萎,但是令人意想不到的事情發(fā)生了比伏,我們的程序crash了,堆棧顯示為:

**2016-03-06 13:11:13.806 URLSessionTest[2704:94286] -[__NSCFLocalDataTask testName]: unrecognized selector sent to instance 0x7fa25a5f8e10**

呵呵疆导,看堆棧的信息提示赁项,這個(gè)crash引起的原因是:沒有testName函數(shù)啊3憾巍S撇恕!败富!

Oh悔醋,my god!什么玩意兽叮,我不是已經(jīng)使用Category技術(shù)為NSURLSessionTask增加了這個(gè)函數(shù)了嗎芬骄?怎么還是沒有提示無實(shí)現(xiàn)呢猾愿?

等等,我們?cè)僮屑?xì)看看账阻。什么5倜亍!淘太!__NSCFLocalDataTask無testName實(shí)現(xiàn)姻僧!這是什么玩意,我明明代碼寫的是NSURLSessionTask捌涯痢撇贺!怎么回事?冰抢?显熏?WTF

咦,難道NSURLSession返回的不是NSURLSessionTask晒屎??缓升?不得已鼓鲁,log下class、supperclass等等看看港谊。

NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
NSLog(@"%@", [task class]);
NSLog(@"%@", [task superclass]);
NSLog(@"%@", [[task superclass] superclass]);
NSLog(@"%@", [[[task superclass] superclass] superclass]);

得到結(jié)果:

**2016-03-06 13:11:13.805 URLSessionTest[2704:94286] __NSCFLocalDataTask**
**2016-03-06 13:11:13.806 URLSessionTest[2704:94286] __NSCFLocalSessionTask**
**2016-03-06 13:11:13.806 URLSessionTest[2704:94286] __NSCFURLSessionTask**
**2016-03-06 13:11:13.806 URLSessionTest[2704:94286] NSURLSessionTask**

在iOS9下骇吭,得到這些結(jié)果,并且iOS7下還不是這個(gè)結(jié)果歧寺,WTFT镎!斜筐!

但是好歹原因總算是找到了:NSURLSession的dataTaskWithURL返回的是一個(gè)private class龙致,壓根就不是NSURLSessionTask,它的superClass的superClass的superClass才是NSURLSessionTask顷链!好長(zhǎng)的繼承鏈...

一次意外的debug目代,也獲得了一個(gè)意外的收貨。

其實(shí)Category這個(gè)技術(shù)和這次的crash沒有直接關(guān)系嗤练,??榛了。可以說這是Apple留的坑吧煞抬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霜大,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子革答,更是在濱河造成了極大的恐慌战坤,老刑警劉巖曙强,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異湖笨,居然都是意外死亡旗扑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門慈省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臀防,“玉大人,你說我怎么就攤上這事边败「ぶ裕” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵笑窜,是天一觀的道長(zhǎng)致燥。 經(jīng)常有香客問我,道長(zhǎng)排截,這世上最難降的妖魔是什么嫌蚤? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮断傲,結(jié)果婚禮上脱吱,老公的妹妹穿的比我還像新娘。我一直安慰自己认罩,他們只是感情好箱蝠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垦垂,像睡著了一般宦搬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劫拗,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天间校,我揣著相機(jī)與錄音,去河邊找鬼杨幼。 笑死撇簿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的差购。 我是一名探鬼主播四瘫,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼欲逃!你這毒婦竟也來了找蜜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤稳析,失蹤者是張志新(化名)和其女友劉穎洗做,沒想到半個(gè)月后弓叛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诚纸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年撰筷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦徘。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毕籽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出井辆,到底是詐尸還是另有隱情关筒,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布杯缺,位于F島的核電站蒸播,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏萍肆。R本人自食惡果不足惜袍榆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塘揣。 院中可真熱鬧蜡塌,春花似錦、人聲如沸勿负。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奴愉。三九已至,卻和暖如春铁孵,著一層夾襖步出監(jiān)牢的瞬間锭硼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工蜕劝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檀头,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓岖沛,卻偏偏與公主長(zhǎng)得像暑始,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子婴削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容