iOS 簡單使用description方法

????簡單的說說ios中的description方法劳翰,在iOS中description方法是一個(gè)非常實(shí)用的方法,在調(diào)試程序時(shí)馒疹,經(jīng)常要打印并查看對(duì)象的信息佳簸。一種辦法是編寫代碼把對(duì)象的全部屬性都輸出到日志中。但是最常用的還是:

NSLog(@"%@",object);

????在構(gòu)建需要打印的日志的字符串時(shí)颖变,object對(duì)象會(huì)收到description消息生均,該方法返回的描述信息將取代“格式字符串里的%@”。如下:

NSArray *arr = @[@"Tom",@"Jerry",@"Kitty"];
NSLog(@"%@",arr);

輸出結(jié)果:

(
    Tom,
    Jerry,
    Kitty
)

????有的時(shí)候如果我們要自定義類腥刹,那么我們要用到description方法時(shí)就要覆寫description才能更有意義马胧,如果不重寫這個(gè)方法就會(huì)調(diào)用NSObject類實(shí)現(xiàn)的默認(rèn)方法。這個(gè)方法定義在NSObject協(xié)議里衔峰,不過NSObject累也實(shí)現(xiàn)了它佩脊。因?yàn)镹SObject并不是唯一的“根類”蛙粘,所以許多方法都要定義在NSObject協(xié)議里。下面就是覆寫description方法:

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ %@",_firstName,_lastName];
}

????在這個(gè)的firstName和lastName是類中的屬性威彰。調(diào)用如下:

User *user = [[User alloc] initWithFirstName:@"Jame" lastName:@"Jan"];
NSLog(@"%@",user);

打印的結(jié)果如下:

 Jame Jan

????這樣就能過通過description方法得到更多需要的信息了出牧,但是這樣還是有一定的問題的,當(dāng)我們想輸出多個(gè)值的時(shí)候抱冷,會(huì)使數(shù)據(jù)變得可讀性較差崔列,那么我們可以通過字典的方式作為description的返回值:

-(NSString *)description
{
    return [NSString stringWithFormat:@"%@ ",@{
                                               @"name":_name,
                                               @"age":@(_age),
                                               @"sex":_sex
                                               };
}

????這樣直接為實(shí)例變量留好位置,然后逐個(gè)打印出來旺遮,用字典來實(shí)現(xiàn)這個(gè)功能可以令代碼更易于維護(hù):如果以后還要向類中新增屬性赵讯,要在description中打印,只更改字典就可以了耿眉。
NSObject協(xié)議中還有一個(gè)方法边翼,那就是debugDescription,這個(gè)方法和description相似鸣剪,區(qū)別就在debugDescription方法是開發(fā)者在調(diào)試器中以控制臺(tái)命令打印對(duì)象時(shí)才調(diào)用的组底。在NSObject類的默認(rèn)實(shí)現(xiàn)中,此方法只有直接調(diào)用了description筐骇。
通過設(shè)置斷點(diǎn)的方式债鸡,在控制器中通過如:po user 這樣的方法就能打印出debugDescription方法中的描述信息,有的時(shí)候我們只是想把簡單的信息放在普通的描述信息中铛纬,而把更詳盡的內(nèi)容放在調(diào)試所用的描述信息里厌均,這樣就要重寫兩個(gè)方法,在description中返回簡單信息告唆,在debugDescription返回詳盡的信息并通過po命令打印棺弊。
還有一個(gè)問題就是在輸出數(shù)組的中存在中文的時(shí)候就是以u(píng)tf-8的形式輸出,所以在這里可以用方法攪拌的方式進(jìn)行轉(zhuǎn)換格式擒悬。
我們就以數(shù)組為例:
首先創(chuàng)建一個(gè)NSObject的類別同時(shí)要加上頭文件

import <objc/runtime.h>

添加代碼如下:

+ (void)sjt_exchangeSelector:(SEL)oldSel andNewSelector:(SEL)newSel {
    Method oldMethod =  class_getInstanceMethod([self class], oldSel);
    Method newMethod  = class_getInstanceMethod([self class], newSel);
    // 改變兩個(gè)方法的具體指針指向
    method_exchangeImplementations(oldMethod, newMethod);
}

然后再創(chuàng)建一個(gè)NSArray的類別添加代碼如下:

+ (void)load {
    // 該方法會(huì)在加載這個(gè)類的時(shí)候執(zhí)行(APP啟動(dòng)時(shí)會(huì)加載模她,只執(zhí)行一次)
    // 此處交換descriptionWithLocale:與自己寫的my_descriptionWithLocale:的方法指針
    [self sjt_exchangeSelector:@selector(descriptionWithLocale:) andNewSelector:@selector(my_descriptionWithLocale:)];
}

- (NSString *)my_descriptionWithLocale:(id)locale {
    NSString *desc = [self my_descriptionWithLocale:locale];
    desc = [self replaceUnicode:desc];
    return desc;
}

- (NSString *)replaceUnicode:(NSString *)unicodeStr {
    NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
    NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData
                                                           mutabilityOption:NSPropertyListImmutable
                                                                     format:NULL
                                                           errorDescription:NULL];
    return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"\n"];
}

????這樣就能夠正常的現(xiàn)在中文了,不需要其他操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懂牧,一起剝皮案震驚了整個(gè)濱河市侈净,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僧凤,老刑警劉巖用狱,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拼弃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摇展,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門吻氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事盯孙÷成” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵振惰,是天一觀的道長歌溉。 經(jīng)常有香客問我,道長骑晶,這世上最難降的妖魔是什么痛垛? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮桶蛔,結(jié)果婚禮上匙头,老公的妹妹穿的比我還像新娘。我一直安慰自己仔雷,他們只是感情好蹂析,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碟婆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竖共。 梳的紋絲不亂的頭發(fā)上蝙叛,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音肘迎,去河邊找鬼甥温。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妓布,可吹牛的內(nèi)容都是我干的姻蚓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼匣沼,長吁一口氣:“原來是場噩夢啊……” “哼狰挡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起释涛,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤加叁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后唇撬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它匕,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年窖认,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豫柬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告希。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖烧给,靈堂內(nèi)的尸體忽然破棺而出燕偶,到底是詐尸還是另有隱情,我是刑警寧澤础嫡,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布指么,位于F島的核電站,受9級(jí)特大地震影響榴鼎,放射性物質(zhì)發(fā)生泄漏伯诬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一檬贰、第九天 我趴在偏房一處隱蔽的房頂上張望姑廉。 院中可真熱鬧,春花似錦翁涤、人聲如沸桥言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号阿。三九已至,卻和暖如春鸳粉,著一層夾襖步出監(jiān)牢的瞬間扔涧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工届谈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枯夜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓艰山,卻偏偏與公主長得像湖雹,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曙搬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,544評(píng)論 33 466
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉摔吏,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,679評(píng)論 0 9
  • 寫在前面 看完了廖大神的 JavaScript 教程,特記錄一下從0搭建一個(gè)完整的 koa2 工程纵装,主要包含: 處...
    二娃__閱讀 2,266評(píng)論 0 6
  • 伊比利亞的陽光依舊明媚橡娄,地中海的風(fēng)也依舊輕浮诗箍,時(shí)至今日,朋友說:皇家馬德里迎來了一個(gè)全新的鼎盛時(shí)代挽唉,那一抹白色扳还,光...
    二胡忽悠閱讀 173評(píng)論 0 0
  • 琴棋書畫詩酒茶氨距, 凡生活,缺一不可棘劣。 許多人說俏让,生活如此匆忙, 城市孤獨(dú)像是鋪天蓋地而來的浪潮茬暇, 足夠?qū)⒚β狄惶斓?..
    嵐曉曉閱讀 438評(píng)論 0 0