学习IOS--description方法\NSLog函数

1.description方法是NSObject自带的方法,包括类方法和对象方法


+ (NSString *)description; // 默认返回 类名
- (NSString *)description; // 默认返回 <类名:内存地址>

2.默认情况下利用NSLog和%@输出对象的时返回的就是类名和内存地址

3.修改NSLog和%@的默认输出:重写类对象或者实例对象的description方法即可。因为NSLog函数进行打印的时候会自动调用description方法


/******************************** Person.h文件*********************************/
#import <Foundation/Foundation.h>

@interface Person : NSObject

+ (NSString *)description;
- (NSString *)description;

@property int age;
@property NSString *name;

@end

/******************************** Person.m文件*********************************/
#import "Person.h"
@implementation Person

#pragma mark 类对象输出的结果
+ (NSString *)description
{
return @"AAA";
}

#pragma mark 实例对象输出的结果
- (NSString *)description
{
// NSLog(@"%@",self); 引发死循环
return [NSString stringWithFormat:@"name = %@ age = %d",_name,_age];
}
@end

/******************************** main.m文件***********************************/
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
Class c = [Person class];
NSLog(@"%@",c);

Person *person = [[Person alloc] init];
person.name = @"John";
person.age = 20;

// 执行NSLog函数的时候会调用description方法默认返回<类名/对象名: 地址>
NSLog(@"%@",person);

}


/**************************** 丰富日志输出 **********************************/
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
Person *person = [[Person alloc] init];

// 打印person对象地址
NSLog(@"%@",person); // <Person: 0x100200ae0>
// 打印person指针的地址
NSLog(@"%p",person); // 0x100200ae0 对象和指针地址一致

// 指针变量的地址
NSLog(@"%p",&person);// 0x7fff5fbff8e8

// NSLog不能%s无法输出带有中文的文件路径,可以用c语言中的printf和%s来代替
// NSLog(@"%s",__FILE__);
printf("%s",__FILE__);

// 输出当前方法
NSLog(@"%s",__FUNCTION__); // 返回 main

}

学习IOS--description方法\NSLog函数

时间: 2024-10-20 12:00:30

学习IOS--description方法\NSLog函数的相关文章

第十一讲.oc学习补充(description方法,)

一.description方法的使用 1.默认的description方法 NSLog函数一旦发现用%@输出某个OC对象时,就会调用这个对象的description方法(这个方法返回值是NSString类型,是OC中的字符串类型),并且将description方法返回的字符串代替%@的位置进行输出. * description方法的默认实现是返回这样的格式:<类名: 对象的内存地址>,因此上面代码的输出结果为: 2.重写description方法 description方法的默认实现是返回类名

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

【原】Java学习笔记008 - 方法(函数)

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 方法/函数 Method/Function 6 7 // 为什么会出现方法? 8 // 原因1.在程序中多处出现相同的语句内容 9 // 原因2.会发生变化 10 11 // [只有变化是不变的] 12 // 回顾一下变量,为了应对变化,提出的新的机制 13 // 需要对变化进行封装处理,在这里就

【学习ios之路:Objective-C】OC中常用的系统排序方法

①.OC中常用排序方法: 1).不可变数组 - (NSArray *)sortedArrayUsingSelector:(SEL)comparator; - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 2)可变数组 - (void)sortUsingSelector:(SEL)comparator; - (void)sortUsingComparator:(NSComparator)cmptr; 3).字典排序 - (NS

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

学习笔记之07-自定义构造方法和description方法

知识回顾 在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject { 4 int _age; 5 } 6 - (void)setAge:(int)age; 7 - (int)age; 8 @end 2.Student.m 1 #import "Student.h" 2 3 @implemen

iOS 高效开发-----实现description 方法 (续)

在 “iOS 高效开发-----实现description 方法”这篇文章的最后,我留下了一个问题,就是,如果要给每个自定义的类覆写description方法和debugDescription方法 ,那将是一件非常庞大的工作量 ,因为自定义的类很多 ,而且每个自定义的类中的属性都会随着需求的修改出现变化 ,那么就又得修改这两个方法,那就变得无穷无尽了,永无宁日了,要么不用,要么就要找到更好得方法去用. 接下来,我们会用到动态运行时runtime. 我们先假设我们要处理的类中的属性都是OC的对象,

IOS学习之路-- 指针&amp;宏函数

如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p

类的本质、description方法、SEL、NSLog输出增强

一.类的本质 1.类也是个对象 其实类也是一个对象,是Class类型的对象,简称“类对象” Class类型的定义 typedef struct objc_class *Class; 类名就代表着类对象,每个类只有一个类对象 2.+load和+initialize +load 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法 先加载父类,再加载子类:也就是先调用父类的+load,再调用子类的+load 先加载元原始类,再加载分类 不管程序运行过程有没有用到这个类,都会调用+