思路:既然我們需要改變NSArry和NSDictionary的系統(tǒng)類方法,所以我們可以利用運(yùn)行時(shí)runtime來進(jìn)行方法交換、另一種方法就是通過添加分類來重寫類方法的實(shí)現(xiàn)。注意:這里不是添加類擴(kuò)展。
為NSArry和NSDictionary添加分類

Object-C file.png

category.png
分類中的實(shí)現(xiàn):
方式一:
刪除.h文件(因?yàn)樵陧?xiàng)目里打印字典或數(shù)組時(shí),使用的是系統(tǒng)的方法并不需要導(dǎo)入分類的頭文件),.m文件下的實(shí)現(xiàn),
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
//重寫系統(tǒng)的方法控制輸出
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *string = [NSMutableString string];
//{}
[string appendString:@"{"];
//拼接key--value
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[string appendFormat:@"%@:",key];
[string appendFormat:@"%@,",obj];
}];
[string appendString:@"}"];
//刪除逗號
//從后往前搜索 得到的是搜索到的第一個(gè)符號的位置
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
@end
@implementation NSArray (Log)
//重寫系統(tǒng)的方法控制輸出
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
// return @"你大爺是你大姐";
NSMutableString *string = [NSMutableString string];
//{}
[string appendString:@"["];
//拼接obj
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[string appendFormat:@"%@,\n",obj];
}];
[string appendString:@"]"];
//刪除逗號
//從后往前搜索 得到的是搜索到的第一個(gè)符號的位置
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
@end
方式二:
.h文件
#import <Foundation/Foundation.h>
@interface NSArray (desc)
@end
@interface NSDictionary (desc)
@end
.m文件
#import "NSArray+desc.h"
@implementation NSArray (desc)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[strM appendFormat:@"\t%@,\n", obj];
}];
[strM appendString:@")"];
return strM;
}
@end
@implementation NSDictionary (desc)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *strM = [NSMutableString stringWithString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[strM appendFormat:@"\t%@ = %@;\n", key, obj];
}];
[strM appendString:@"}\n"];
return strM;
}
@end