自定义一个Person类

@interface Person : NSObject
{
int _age;
double _height;
double _weight;
NSString *_name;
NSString *_tel;
NSString *_email;
} - (void)setAge:(int)age;
- (void)setHeigth:(double)height;
- (void)setWeight:(double)weight;
- (void)setName:(NSString *)name;
- (void)setTel:(NSString *)tel;
- (void)setEmail:(NSString *)email; - (int)age;
- (double)height;
- (double)weight;
- (NSString *)name;
- (NSString *)tel;
- (NSString *)email;

实现setter和getter,具体不详述了。

如果开发中想打印这个Person类创建出来的对象中的值通常情况是通过NSLog来答应,如下:

int main(int argc, const char * argv[]) {

    // 创建一个新对象并且赋值
Person *p = [Person new];
[p setAge:];
[p setName:@"lnj"];
[p setHeigth:1.75];
[p setWeight:];
[p setTel:@""];
[p setEmail:@"lnj@520it.com"];

  // 一般是通过这样打印,但是如果我们需要经常打印某个类创建出来的对象,每次这么写,就显得有点2了。解决办法就是通过重写这个类的 description这个对象方法来使得打印NSLog(@"%@",p),这样直接调用该方法,每次答应出来的就是我们想要的了。
// NSLog(@"age = %i, name = %@, height = %f, weight = %f, tel = %@, email = %@", [p age], [p name], [p height], [p weight], [p tel], [p email]);
// %@是用来打印对象的, 其实%@的本质是用于打印字符串
// 只要利用%@打印某个对象, 系统内部默认就会调用父类的description方法
// 调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址> NSLog(@"person = %@", p); NSLog(@"%@", p);
// class注意c是小写, 只要给类发送class消息, 就会返回当前类的类对象
// 1.获取Person对应的类对象
Class c = [Person class];
// 2.打印Person的类对象
NSLog(@"当前对象对应的类 = %@", c);
NSLog(@"当前对象的地址 = %p", p);
return ;
}

description方法

注意点:

在description方法中尽量不要使用self来获取成员变量

因为如果你经常在description方法中使用self, 可能已不小心就写成了 %@, self

如果在description方法中利用%@输出self会造成死循环,因为此时的self就是该类的对象,打印自己又会调用-description,无限循环了就。

self == person实例对象

- (NSString *)description
{
NSString *str = [NSString stringWithFormat:@"age = %i, name = %@, height = %f, weight = %f, tel = %@, email = %@", _age, _name, _height, _weight, _tel, _email]; return str; }

- description 方法作用的更多相关文章

  1. OC基础--description方法

    PS:经过之类重写description方法后,个人感觉有点像C#中的ToString();方法 一.description方法的作用:(输出所有的OC对象都用%@) 1.默认情况下(不重写descr ...

  2. OC语法4——自定义构造方法,description方法

    自定义构造方法: 我们已经知道创建对象分两步,1:在内存中开辟存储空间,并把地址存储在指针变量里,2:调用指针变量的初始化方法init初始化该对象. Student * stu = [Student ...

  3. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  4. 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...

  5. 什么情况下才要重写Objective-C中的description方法

    特别注意: 千万不要在description方法中同时使用%@和self,同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用descrip ...

  6. OC 初识NSString,self关键字,继承,成员变量的可见性,description方法

    OC 初识NSString,self关键字,继承,成员变量的可见性,description方法 初识 NSString: char * string = "旭宝爱吃鱼"; 常量字符 ...

  7. CO-类的本质、description方法

    类的本质 1. 类也是个对象 其实类也是一个对象,是Class类型的对象,简称“类对象” Class类型的定义 typedef struct objc_class  *Class; 类名就代表着类对象 ...

  8. 李洪强iOS开发之【Objective-C】07-自定义构造方法和description方法

    知识回顾 在前面已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h 1 #import <Foundation/Foundation.h> 2 3 ...

  9. Objective-C运行时编程 - 实现自动化description方法的思路及代码示例

    发布自米高 | Michael - 博客园,源地址:http://www.cnblogs.com/michaellfx/p/4232205.html,转载请注明. 本文结构 基础实现 性能优化 参考 ...

随机推荐

  1. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 //获取socket ...

  2. php 中 用curl 发送 https 请求

    在 php.ini 中修改配置选项 curl.cainfo = "D:\phpStudy\php\php-5.6.27-nts\pert\cacert.pem" 其中 cacert ...

  3. Windows编程

    本文整理自百科.知乎与 科学家的世界 问题一:为什么开发windows应用程序不用c 而用.net,java,c++? 用 c+windows API  开发windows 应用程序  比用.net, ...

  4. 双色球基础分析--SQL

    代码是心血来潮编写得,就象买彩票一样,为国家做贡献:首先建立一个表,表得数据可以从福利彩票网站上获得,自己一个一个得录入进去先: 表结构为: ) NOT NULL ,  --期数    [F1] [i ...

  5. w3cschool在线教程

    做网页开发的,没有不知道w3cschool的,如果你还不知道,那么就应该早点看下面推荐的文章,菜鸟可以帮你提升你的技能,老鸟可以温故而知新. 第一个是:http://www.w3school.com. ...

  6. 如何开启 FastAdmin 的顶部导航功能?

    如何开启 FastAdmin 的顶部导航功能? FastAdmin 默认的是侧边导航,但是如果功能多的时候就有会眼花缭乱,使用顶部导航就会清晰很多. 好消息现在已经支持顶部导航,可以在demo.fas ...

  7. ajax同步异步

    test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js f ...

  8. int 和 Integer 有什么区别

    原文地址:https://blog.csdn.net/chenliguan/article/details/53888018 1 int与Integer的基本使用对比 (1)Integer是int的包 ...

  9. php时间 显示刚刚 几分钟前等

    功能示例: $now = time();foreach($sys_res as $k => $v){ $day = intval(floor(($now - $v->system_time ...

  10. 在Activity中使用Menu

    1.右击res-->New-->Directory输入文件名menu,在此文件夹下新建main菜单文件:右击menu-->New-->Menu resource file 2. ...