oc24--description

//  Person.h

#import <Foundation/Foundation.h>

@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;
@end
//  Person.m

#import "Person.h"

@implementation Person

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

- (int)age
{
    return _age;
}
- (double)height
{
    return _height;
}
- (double)weight
{
    return _weight;
}
- (NSString *)name
{
    return _name;
}
- (NSString *)tel
{
    return _tel;
}
- (NSString *)email
{
    return _email;
}

// 可以重写description方法, 返回我们需要打印的内容
// 只要利用%@打印对象, 就会调用description
// 如果打印的是对象就会调用-号开头的description方法
- (NSString *)description
{

    /*
     访问属性有三种方式
     p->_age;  //属性
     [p age];  //get方法
     p.age;   //点语法

     self写在对象方法中就代表当前调用该方法的对象
     self.age; // [self age];
     self->age;
     [self age];
     */

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

    NSLog(@"-------------");
    // 建议: 在description方法中尽量不要使用self来获取成员变量\
    因为如果你经常在description方法中使用self, 可能已不小心就写成了 %@, self
    // 如果在description方法中利用%@输出self会造成死循环
    // self == person实例对象
    return [NSString stringWithFormat:@"%@", self];
}

// 仅仅作为了解, 开发中99%的情况使用的都是-号开头的description
+ (NSString *)description
{
    return @"ooxx";
}
/*
 如果通过%@打印对象就会调用-号开头的
 如果通过%@打印类对象就会调用+号开头的
 */
@end
//
//  main.m
//  description

#import <Foundation/Foundation.h>
#import "Person.h"

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

    Person *p = [Person new];
    [p setAge:30];
    [p setName:@"lnj"];
    [p setHeigth:1.75];
    [p setWeight:65];
    [p setTel:@"13554499311"];
    [p setEmail:@"[email protected]"];

    NSLog(@"age = %i, name = %@, height = %f, weight = %f, tel = %@, email = %@", [p age], [p name], [p height], [p weight], [p tel], [p email]);
    // %@是用来打印对象的, 其实%@的本质是用于打印字符串
    // 只要利用%@打印某个对象, 系统内部默认就会调用父类的description方法
    // 调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址>

    NSLog(@"%@", p);
    // class注意c是小写, 只要给类发送class消息, 就会返回当前类的 类对象
    // 1.获取Person对应的类对象
    Class c = [Person class];
    // 2.打印Person的类对象
    NSLog(@"当前对象对应的类 = %@", c);
    NSLog(@"当前对象的地址 = %p", p);
    return 0;
}
时间: 2024-10-29 19:05:59

oc24--description的相关文章

Description Resource Path Location Type The superclass &quot;javax.servlet.http.HttpServlet&quot; was not foun

一段时间没亲自建新项目玩乐,今天建立了一Maven project的时候发现了以下异常,Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path index.jsp /easyBuy/src/main/webapp line 1 JSP Problem 经过查找原因,原来是因为忘记设置server

获取枚举类型Description特性的描述信息

C#中可以对枚举类型用Description特性描述. 如果需要对Description信息获取,那么可以定义一个扩展方法来实现.代码如下: public static class EnumExtensions { public static string GetDescription(this object value) { if (value==null) return string.Empty; Type type = value.GetType(); var fieldInfo = ty

Description方法&amp;&amp;SEL类型

description方法和sel数据类型 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打

Description方法&amp;&amp;SEL数据类型

description方法和sel数据类型 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打

description方法 oc 就是NSLog使用

使用场景: 父类的-description默认是调用返回的是“类名+内存地址:” 我们需要重写这个方法: NSLog输出C语言字符串的时候,不能有中文: 打印当前的行号:NSLog(@“%d”,_LINE_); 打印当前文件所处的文件路径:printf(@“%s\n”,_FILE_); 打印指针变量地址:NSLog(@“%p”,&p); 打印对象地址:NSLog(@“%p”,p); 输出当前函数名:NSLog(@“%s\n”,_func_);

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

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

OC语言description方法和sel

一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打印对象如(“@%”,P)默认打印输出为<类名

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

特别注意: 千万不要在description方法中同时使用%@和self,同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法 1.NSLog回顾   大家都知道,我们可以用NSLog函数来输出字符串和一些基本数据类 1 int age = 11; 2 NSLog( @" age is %d", age); * 第2行的%d代表会输出一个整型数据,右边的变量age会代替%d的位置进行输出 * 输出结果

OC学习笔记-description方法

Code: #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; @property double weight; @end @implementation Person - (NSString*)description { return [NSString stringWithFormat:@"age = %d, weight = %.2f", [self age

【JUnit4.10源代码分析】3.4 Description与测试树

Description使用组合模式描述一个测试树.组合模式中所有元素都是Composite对象. Description有成员变量private final ArrayList<Description>fChildren= newArrayList<Description>(); //无元素 保存其子结点.fChildren非空,所以任何子结点都是一个Composite,但是this. getChildren().size()为0的结点,事实上就是叶子. 测试树 一颗测试树Desc