NSObject協議中方法:description 和 debugDescription

description基本概念

?

1.NSLog(@"%@", objectA);這會自動調用objectA的description方法來輸出ObjectA的描述信息.

2.description方法默認返回對象的描述信息(默認實現是返回類名和對象的內存地址)

3.description方法是基類NSObject 所帶的方法,因為其默認實現是返回類名和對象的內存地址, 這樣的話,使用NSLog輸出OC對象,意義就不是很大,因為我們并不關心對象的內存地址,比較關心的是對象內部的一些成變量的值。因此,會經常重寫description方法,覆蓋description方法 的默認實現

description重寫的方法

/**對象方法:當使用NSLog輸出該類的實例對象的時候調用*/

-(NSString *) description

{

return [NSString stringWithFormat:@"狗腿數:%d,狗眼數%d\n",_legNum,_eyeNum];

}

/**類方法:當使用NSLog輸出該類的類對象的時候調用*/

+(NSString *) description

{

return @"+開頭的description方法";

}

description陷阱

1.千萬不要在description方法中同時使用%@和self,下面的寫法是錯誤的

- (NSString *)description {

return [NSString stringWithFormat:@"%@", self];

};

2.同時使用了%@和self,代表要調用self的description方法,因此最終會導致程序陷入死循環,循 環調用description方法;

3.當[NSString stringWithFormat:@“%@”, self]; 使用它時,循壞調用,導致系統會發生運行時錯誤;

4.當該方法使用NSLog(“%@”,self) 時候, 系統做了相關的優化,循壞調用3次后就會自動退出.

?
@interface?LaoShiEr :?NSObject

@property?(nonatomic,?copy,?readonly)?NSString?*name;

@property?(nonatomic,?copy,?readonly)?NSString?*work;

- (id)initWithName:(NSString?*)name

????????????? work:(NSString?*)work;

@end

@implementation?LaoShiEr

- (id)initWithName:(NSString?*)name

????????????? work:(NSString?*)work

{

????if?((self?= [superinit])) {

????????_name?= [name?copy];

????????_work?= [work?copy];

??? }

????return?self;

}

- (NSString?*)description

{

????return?[NSStringstringWithFormat:@"<%@ : %p,\"%@ %@\">",[selfclass],self,_name,_work];

}

@end

按照上面的代碼來寫,輸出如下信息

LaoShiEr?*laoshi = [[LaoShiEralloc]

????????????????????????initWithName:@"laoshier"

????????????????????????work:@"coder"];

????NSLog(@"laoshier = %@",laoshi);

laoshier = <LaoShiEr : 0xb64bec0,"laoshier coder">

這樣就比之前所輸出得信息更加清楚了,也更為有用了。再description中輸出很多互不相同的信息的時候可以借助NSDictionary類的description方法。修改一下老師兒的description方法

- (NSString?*)description

{

????return?[NSStringstringWithFormat:@"<%@ : %p, %@>",[selfclass],self,@{@"name":_name,@"work":_work}];

}

再此輸出

laoshier = <LaoShiEr : 0xb677420, {

??? name = laoshier;

??? work = coder;

}>

debugDescription方法是開發者在調試器中以控制臺命令打印對象時才調用的。在NSObject類的默認實現中,此方法只是直接調用了description。以LaoShiEr為例,我們在創建實例所用的代碼后面插入斷點,然后通過調試器運行程序,暫停于此:并且po完成對象打印:

<LaoShiEr : 0xb7c4310, {

??? name = laoshier;

??? work = coder;

}>

當你不想把類名與指針地址這種額外內容放在普通的描述信息里,但是卻希望調試的時候能夠很方便地看到它們,在此情況下,就可以使用這種輸出方式來實現。

- (NSString?*)description

{

????return?[NSStringstringWithFormat:@"<%@>",@{@"name":_name,@"work":_work}];

}

- (NSString?*)debugDescription

{

????return?[NSStringstringWithFormat:@"<%@ : %p, %@>",[selfclass],self,@{@"name":_name,@"work":_work}];

}



?

轉載于:https://www.cnblogs.com/fengmin/p/6092678.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456890.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

re模塊的深入

import re 字符串切割str1 "allen is a good man" print(str1.split()) print(re.split((r" "),str1)) re.finditer函數 原型&#xff1a;finditer(pattern, string, flags0) pattern: 匹配的正則表達式 string: 要匹配的字符串 flags:標志位&…

身份證

<?php defined(IN_IA) or exit(Access Denied);class check {// $num為身份證號碼&#xff0c;$checkSex&#xff1a;1為男&#xff0c;2為女&#xff0c;不輸入為不驗證public function checkIdentity($num, $checkSex ) {// 不是15位或不是18位都是無效身份證號if (strl…

鼓勵參與計算機考試宣傳標語,誠信考試的宣傳標語(精選60條)

誠信考試的宣傳標語(精選60條)誠信考試&#xff0c;做文明公民&#xff0c;既是時代需要&#xff0c;也是做人的基本準則。下面是小編收集的誠信考試的宣傳標語(精選60條)&#xff0c;歡迎閱讀。1、讓舞弊遠離校園&#xff0c;讓誠信常駐心中2、刻苦學習&#xff0c;認真做人3、…

初學大數據之如何選擇機器學習算法

最近在國外網站看到一篇不錯的文章&#xff0c;所以就翻譯過來給大家分享一下。主要介紹初學者怎么選擇機器學習算法,希望對各位初學者有幫助。 原文如下: 一個初學者面臨各種機器學習算法的典型問題是“我應該使用哪種算法&#xff1f;”問題的答案取決于許多因素&#xff0…

Django查詢 – id vs pk

當編寫django查詢時&#xff0c;可以使用id / pk作為查詢參數。 Object.objects.get(id1) Object.objects.get(pk1) pk代表主鍵(primary key)&#xff0c; pk更加獨立于實際的主鍵字段&#xff0c;即不必關心主鍵字段是否被稱為id或object_id或其他。 如果您具有不同主鍵字…

Tomcat的Session管理(三)

摘要&#xff1a;PersistentManager與StandardManager的異同。 之前兩篇關于session的文章主要討論了session相關的創建、查詢、過期處理。而我們查看源碼的時候都是默認實現是StandardManager類&#xff0c;實際上實現也可以是PersistentManager類&#xff0c;下面我們就查看下…

計算機基礎的函數公式,大學計算機基礎 excle 公式與函數

《大學計算機基礎 excle 公式與函數》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《大學計算機基礎 excle 公式與函數(32頁珍藏版)》請在人人文庫網上搜索。1、,.,場景1,發布日期:2011.11.09,新入職場,經理說&#xff1a; 小張&#xff0c;以后工資發放的事情就交給…

穩定和性能如何兼顧?58大數據平臺的技術演進與實踐

作者&#xff5c;趙健博 編輯&#xff5c;尚劍 本文將為你分享58大數據平臺在最近一年半內技術演進的過程&#xff0c;包括&#xff1a;58大數據平臺目前的整體架構是怎么樣的&#xff1b;最近一年半的時間內我們面臨的問題、挑戰以及技術演進過程&#xff1b;以及未來的規劃。…

Random Forest算法簡介

轉自JoinQuant量化課堂 一、相關概念 分類器&#xff1a;分類器就是給定一個樣本的數據&#xff0c;判定這個樣本屬于哪個類別的算法。例如在股票漲跌預測中&#xff0c;我們認為前一天的交易量和收盤價對于第二天的漲跌是有影響的&#xff0c;那么分類器就是通過樣本的交易量…

MySQL 學習筆記

01 import pymysql#連接數據庫db pymysql.connect("192.168.1.179","root","liuwang","liu")#創建一個cursor對象 cursor db.cursor() sql "select version()"cursor.execute(sql)data cursor.fetchone() print(data)…

簡單交互

控件有著各種事件&#xff0c;例如被點擊的時候&#xff0c;我們可以在事件里面添加動作和命令&#xff0c;讓控件可以和用戶交互&#xff0c;這里我們演示一個簡單的交互&#xff1a;當用戶點擊文字控件的時候&#xff0c;它開始動畫向下移動然后動畫旋轉&#xff0c;效果入下…

綜合素質計算機考點,教師資格證小學綜合素質考點及考試真題:信息處理能力...

小學綜合素質考點及考試真題——信息處理能力大綱要求&#xff1a;具有運用工具書檢索信息、資料的能力。具有運用網絡檢索、交流信息的能力。具有對信息進行篩選、分類、存儲和應用的能力。具有運用教育測量知識進行數據分析與處理的能力。具有根據教育教學的需要&#xff0c;…

API文檔自動生成

本文主要講述自動化API文檔生成——apidoc。網上有幾個篇文章都只是介紹apidoc的&#xff0c;具體怎么在自己的項目中使用以及與其他配合使用都是沒介紹的。最近開始玩服務器&#xff0c;了解到了有Windows與Linux之間共享文件的方法&#xff0c;就是samba。然后具體和apidoc結…

機器學習筆記之SVM(SVR)算法

學過SVM后&#xff0c;看了那么多別人的文章&#xff0c;是時候自己總結一波了。權當寫的筆記供自己日后再回顧吧。 PS:結合自己在工作過程中&#xff08;我這里用SVR做股票預測&#xff09;用到的知識來寫的&#xff0c;不會很全面&#xff0c;若有些知識這里沒提及讀者可自行…

[轉]基于圖的機器學習技術:谷歌眾多產品和服務背后的智能

近來機器學習領域實現了很多重大的進展&#xff0c;這些進展讓計算機系統具備了解決復雜的真實世界問題的能力。其中&#xff0c;谷歌的機器學習又是怎樣的 &#xff1f; 近來機器學習領域實現了很多重大的進展&#xff0c;這些進展讓計算機系統具備了解決復雜的真實世界問題的…

安裝mysql后在安裝目錄下只有my-default.ini沒有my.ini文件 解決-The MySQL server is running with the --secure-file-priv

WIN10 系統環境 安裝mysql后在安裝目錄下只有my-default.ini沒有my.ini文件 。 mysql報錯 ---------- The MySQL server is running with the --secure-file-priv option so it cannot execute this statement -------- 但是更改或想要查找配置文件就需要如下操作 在 安裝…

loewe測試軟件,實測Loewe三角包 最輕的小包最貼心的設計

原標題&#xff1a;實測Loewe三角包 最輕的小包最貼心的設計導語&#xff1a;每周一期的“包治百病”又跟大家見面來啦&#xff01;“包治百病”全方位評測包包的容量、重量、背法、在不同身高妹子身上的效果、各種驚人的小細節以及可能存在的問題&#xff0c;為有意購買這些包…

hadoop集群的搭建(分布式安裝)

集群 計算機集群是一種計算機系統&#xff0c;他通過一組松散集成的計算機軟件和硬件連接起來高度緊密地協同完成計算工作。集群系統中的單個計算機通常稱為節點&#xff0c;通常通過局域網連接。集群技術的特點&#xff1a;1、通過多臺計算機完成同一個工作。達到更高的效率 2…

解決:Error establishing a database connection阿里云修改數據庫密碼

今天閑來無事想把所有的二級密碼改成一致的&#xff0c;所以就把阿里云的mysql數據庫的密碼改了&#xff0c;結果&#xff0c;打開頁面報錯了&#xff0c;下邊的截圖是我問題解決后&#xff0c;重新復現的。如果修復這個問題后wordpress登錄頁面白板&#xff0c;此時不要著急&a…

機器學習各算法思想(極簡版)

讀到的一篇不錯的文章&#xff0c;拿來和大家分享一下。 轉自–頭條公眾號–極數蝸牛 &#xff08;1&#xff09;線性回歸 回歸最早是由高爾頓研究子女身高與父母身高遺傳關系提出的&#xff0c;發現子女平均身高總是向中心回歸而得名。其實“一分辛苦一分才”中就蘊含了線性…