您可以通过覆盖-(void)description 方法来做到这一点。
示例:
假设我们有简单的Car 类。
@interface Car : NSObject
@property (copy, nonatomic) NSString *model;
@property (copy, nonatomic) NSString *make;
@property (strong, nonatomic) NSDate *registrationDate;
@property (assign, nonatomic) NSInteger mileage;
@property (assign, nonatomic) double fuelConsumption;
@end
@implementation
- (NSString*)description {
return [NSString stringWithFormat:@"<%@:%p %@>",
[self className],
self,
@{ @"model" : self.model,
@"make" : self.make,
@"registrationDate": self.registrationDate,
@"mileage" : @(self.mileage),
@"fuelConsumption" : @(self.fuelConsumption)
}];
}
@end
将其放入NSDictionary 将在控制台中创建非常好的输出。
另一方面,您可以在 NSObject 类上创建类别并执行以下操作:
- (NSString*)myDescriptionMethod {
NSMutableDictionary *dict = [NSMutableDictionary new];
unsigned int count;
objc_property_t *properties = class_copyPropertyList([self class], &count);
for (int i = 0; i < count; i++) {
const char *property = property_getName(properties[i]);
NSString *propertyString = [NSString stringWithCString:property encoding:[NSString defaultCStringEncoding]];
id obj = [self valueForKey:propertyString];
[dict setValue:obj forKey:propertyString];
}
free(properties);
return [NSString stringWithFormat:@"<%@ %p %@>",
[self class],
self,
dict];
}
那么您将避免在您的类中覆盖-(void)description 方法。
从here获取它