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.mzph.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;发现子女平均身高总是向中心回归而得名。其实“一分辛苦一分才”中就蕴含了线性…