您好,欢迎访问代码之道!登录后台查看权限
  • 欢迎大神光临
  • 有朋自远方来 不亦悦乎

Objective-C教程之类的描述和格式化输出

ObjC教程 老刘 2018-08-16 692 次浏览 0个评论

重写描述

继承自NSObject对象的类都可以用%@格式化输出,NSObject默认输出对象指针地址,但是可以发现 一些系统类比如NSString并不是这样的。

打印NSObject和NSString

#include <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSObject *obj1 = [NSObject new];
        NSLog(@"obj1-->%@", obj1);
        NSLog(@"obj1-->%@", [obj1 description]);
        NSString *str1 = @"Some string...";
        NSLog(@"str1-->%@", str1);
    }
    return 0;
}

/*
程序输出:
2018-08-16 11:08:04.521 main[1188:36261] obj1--><NSObject: 0x7f9a6f604e40>
2018-08-16 11:08:04.521 main[1188:36261] obj1--><NSObject: 0x7f9a6f604e40>
2018-08-16 11:08:04.521 main[1188:36261] str1-->Some string...
 * */

其实这是由description控制输出的,重写description方法,就可以自定义输出。

自定义类,重写description

#include <Foundation/Foundation.h>

@interface MSPerson : NSObject

@property (nonatomic, copy)NSString *name;
@property (nonatomic, assign)NSUInteger age;

- (instancetype)initWithName:(NSString *)name andAge:(NSUInteger)age;

@end

@implementation MSPerson
- (instancetype)initWithName:(NSString *)name andAge:(NSUInteger)age {
    self = [super init];
    if (self) {
        _name = name;
        _age = age;
    }
    return self;
}

- (NSString *)description {
    return [NSString stringWithFormat:@"{name:=\"%@\",age=\"%lu\"}", _name, _age];
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        MSPerson * p1 = [[MSPerson alloc]initWithName:@"jack" andAge:18];
        NSLog(@"p1-->%@", p1);
    }
    return 0;
}

/*
程序输出:
2018-08-16 11:32:21.526 main[1290:42600] p1-->{name:="jack",age="18"}
 * */

已有 692 位网友参与,快来吐槽:

发表评论