iOS进阶_Log分类打印日志自动转换中文

2023-11-14

description方法是NSObject类的一个实例方法,因此所有的Object-C对象都有description方法。description方法返回的永远是字符串。
对于一个Person类,如果没有重写description方法,NSLog(@“%@”,p),输出的是p的地址,而我们想要的效果是打印出person的成员变量,所以我们可以在Person类里重写description方法。

-(NSString *)description{  

    NSString * string = [NSString stringWithFormat:@"<Person: name = %@ age = %ld>",self.name,self.age];  

    return string;  

} 

另外一种方式创建分类,重写- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;方法

这里写图片描述

这是未做处理前的log,我们可以看到编辑器没有按照我们需要的方式打印中文

创建分类

这里写图片描述

注意:Xcode8.0以后,- (NSString *)descriptionWithLocale:(id)locale方法不再可用,需要使用- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level

NSArray+Log.h

#import <Foundation/Foundation.h>

@interface NSArray (Log)
@end

@interface NSDictionary (Log)
@end

NSArray+Log.m

#import "NSArray+Log.h"

@implementation NSArray (Log)

/**
 *  输出正常NSArray的中文
 */

- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    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 (Log)
/**
 *  输出正常NSDictionary的中文
 */
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
    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

在运行一下,如愿看到中文输入了

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS进阶_Log分类打印日志自动转换中文 的相关文章

  • iOS进阶_密码学进阶(一.对称加密算法简介)

    加密算法 HASH 散列函数 不可逆 密码 识别 文件 识别 以下两种加密算法 都是可逆的 明文 gt 加密 gt 密文 密文 gt 解密 gt 明文 对称加密 传统加密算法 加密和解密使用同一个 密钥 密钥的保密工作就非常的重要 密钥会定
  • iOS架构师_观察者模式

    定义 观察者模式 有时又被称为模型 视图 View 模式 源 收听者 Listener 模式或从属者模式 一个目标物件管理所有相依于它的观察者物件 并且在它本身的状态改变时主动发出通知 这通常透过呼叫各观察者所提供的方法来实现 此种模式通常
  • iOS架构师_UML建模语言

    UML UML统称建模语言 面向对象软件的表转化建模语言 包含Booch MOT OOSE 工具 StarUML 时序图
  • iOS中socket通信---基于CocoaAsyncSocket实现

    前言 最近项目中涉及到socket通信这块 所以有幸有时间大概看了一下这一块 目前还在实现阶段 因此现在还不能去些具体的实现过程 现在只大概描述一下这几天看的资料和自己的一点心得吧 等项目实现之后会将具体的实现流程写出来以供大家参考 Soc
  • iOS进阶—Runtime基础

    iOS进阶 目录 GitHub参考 RunTime 基础 一个程序的执行过程 大概就是代码 gt 编译链接 gt 执行 C语言 import
  • iOS架构-组件化(项目实战-项目首页架构)

    UI架构设计 设计模式 外观模式 代理模式 适配器模式 adapter 注意 一版本只是搭建结构 一 1 0 Tab搭建 二 1 1 新增UICollectionView 主页 gt 整体设计基于 gt UICollectionView 滑
  • iOS开发_HOOK

    我们在使用NSURLRequest时 传入请求地址URL 但是如果URL中有中文的话 我们会发现NSURLRequest的请求地址会报空 void viewDidLoad super viewDidLoad NSURL url NSURL
  • iOS架构师_架构模式(代理,block,通知,MVC,MVP,MVVM)

    1 什么是架构 没有明确的定义 属于设计的一方面 没明确的把设计和架构进行区分 它可以小到类与类之间的交互 大到不同模块之间 以及不同业务之间的交互 都可以从架构的层面去理解它 所有架构和设计模式的目的都是为了解耦合 2 基本的架构基础 案
  • iOS进阶—Runtime源码解析:动态方法解析

    GitHub参考 PS 参考GitHub分享的objc runtime master代码 及Runtime003代码 iOS进阶 目录 接上文iOS进阶 Runtime源码解析 消息发送 查看Runtime源码 No implementat
  • iOS进阶_多线程(二.线程间的状态)

    ViewController m 004 NSThread状态 Created by mac on 2018 4 27 Copyright 2018年 mac All rights reserved import ViewControlle
  • iOS架构-组件化(Carthage管理工具)

    一 Carthage项目管理工具使用 Step 1 安装 更新Homebrew工具 1 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install ma
  • iOS架构师_SDWebImage源码分析

    1 对SDdemo的分析 针对SD的3 8 2版本进行分析 因为从git上面直接下载SD的源码 项目运行会报错 缺少libwebp这个库 我们下载3 8 2版本 运行 libwebp 是个webp的图片格式 属于谷歌的库 所以只能翻墙去国外
  • iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)

    NSURLConnection下载 我们在前面的文章中介绍了MAC电脑搭建Apache服务器 在Sites文件夹中放置一个视频文件MVVM mp4 pbb 通过NSURLConnection进行下载 访问http localhost 我们可
  • iOS架构师_消息转发机制

    1 动态方法解析 对象在收到无法处理的消息时 会调用下面的方法 前者是调用类方法时会调用 后者是调用对象方法时会调用 未实现类方法调用 BOOL resolveClassMethod SEL sel 未实现实例方法调用 BOOL resol
  • iOS开发之ReactiveCocoa框架(RAC)第五篇队列与高级函数

    h文件 import ViewController h import ReactiveCocoa interface ViewController end implementation ViewController void viewDid
  • iOS开发之Runtime运行时机制

    摘要 Objective C是基于C加入了面向对象特性和消息转发机制的动态语言 除编译器之外 还需用Runtime系统来动态创建类和对象 进行消息发送和转发 作者通过分析Apple开源的Runtime代码来深入理解OC的Runtime机制
  • iOS进阶_Log分类打印日志自动转换中文

    description方法是NSObject类的一个实例方法 因此所有的Object C对象都有description方法 description方法返回的永远是字符串 对于一个Person类 如果没有重写description方法 NSL
  • iOS进阶_NSURLSession(二.断点续传)

    断点续传 从上一篇文章中 我们了解了使用NSURLSession进行文件下载 我们在其基础上继续探索NSURLSession的断点续传 在NSURLSession中 我们使用reumeData来存储下载的数据进度 import ViewCo
  • iOS进阶_kvc使用注意事项

    细节1 我们在项目中使用kvc 在设置model属性的时候 注意尽量不要使用基本数据类型 实例 数据模拟 注意age是null类型的 Person h import
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y

随机推荐

  • 未能连接服务器1004,FAILURE:Error Domain = NSURLErrorDomain Code = -1004&#34;无法连接到服务器。&#34;...

    在此之前 我想列出我已阅读的帖子并尝试实施答案 避免重复 我正在开发SDK 我已经创建了一些UI测试 我试图不连接到后端系统并通过在测试时在本地机器上运行的存根服务器来模拟它们 所有请求都必须转到此服务器 我创建了一个永远不会提交到App
  • 微信AR教程|鼓浪屿趣味地图

    KIVICUBE教程 鼓浪屿WebAR趣味地图 01 场景构想 首先需要注册kivicube账号 kivicube是一个WebXR在线制作工具 帮助用户通过在线可视化编辑即可快速制作AR场景 并可一键发布至web与微信小程序两个端口 通过微
  • 【hello C++】类和对象(下)

    目录 1 再谈构造函数 1 1 构造函数体赋值 1 2 初始化列表 1 3 explicit关键字 2 static成员 2 1 概念 2 2 特性 3 友元 3 1 友元函数 3 2 友元类 4 内部类 5 匿名对象 6 拷贝对象时的一些
  • 用sort 对结构体排序

    思路 先定义一个你想要的结构体 然后再自定义一个cmp函数 根据需要来进行大小比较的判断 最后在main函数中通过sort xxx xxx n cmp 来进行判断即可 实例 struct people string name string
  • 【硬件架构的艺术】学习笔记(1)亚稳态的世界

    目录 1 亚稳态 1 1 什么是亚稳态 1 2 亚稳态窗口 1 3 避免亚稳态 1 3 1 使用多级同步器 1 3 2 使用时钟倍频电路的多级同步器 1 4 亚稳态测试电路 1 5 同步器的类型 1 6 亚稳态综合性建议 1 亚稳态 1 1
  • docker教程:从头基于空镜像scratch创建一个新的Docker镜像

    从头基于空镜像scratch创建一个新的Docker镜像 我们在使用dockerfile构建镜像时 一种方式是使用预制镜像 这样可以省很多工作量 但问题是镜像会变得特别大 尤其是安装一些应用程序所需的依赖后 镜像的尺寸会更大 如果我们的需求
  • Unity常用旋转API

    Unity中的旋转通常可以用Transform 直接控制和 rotation 控制两种方式 一 Transform控制 工程中的scene1 1 1 Transform Rotate 旋转某个角度 函数定义 csharp view plai
  • python turtle代码示例-Python turtle.left方法代码示例

    本文整理汇总了Python中turtle left方法的典型用法代码示例 如果您正苦于以下问题 Python turtle left方法的具体用法 Python turtle left怎么用 Python turtle left使用的例子
  • 大屏数据可视化——屏幕适配方案(多分辨率下)

    文章目录 前言 一 一些前提概念 1 1 常见大屏分辨率 1 2 设备像素 二 适配痛点 三 关于rem 四 关于px2rem 五 适配方案 5 1 rem自适应缩放 5 2 css3缩放scale 六 demo演示 6 1 1366 76
  • vs2017统计代码行数方法

    方法一 查找所有代码行数 包括系统生成 1 打开项目 2 编辑 查找和替换 选中 在文件中查找 然后就会弹出一个查找框 输入正则表达式 b b 选择查找整个解决方案 查找选项选择使用正则表达式 然后查找全部 最后就会统计出一共有几行 方法二
  • 华为OD机试 Java查找人名

    题目 代码 import java util ArrayList import java util List public class NameMatcher public
  • 网速dns怎么调快_Switch【实用DNS分享】:有效提升网络速度!

    最近很多朋友反应 似乎又有一批DNS不太灵了 下载速度直线下降 游戏联网体验也大打折扣 根据检测以下是出问题的DNS和一批没被 污染 的DNS 测试网络环境 广东电信 100M光纤 被淘汰的DNS 如果还有使用这一批DNS的玩家请研究一下自
  • BeanUtils.copyProperties的使用方法

    BeanUtils copyProperties的使用方法 1 使用的是springframe包下的 BeanUtils copyProperties a b 把a属性拷贝给b属性 2 注意事项 使用时 例如 a和b都用page封装起来 P
  • STM32F103 内部FLASH读写擦操作

    内部flash介绍 开发步骤 1 解锁和锁定 前面我们介绍了在对 FLASH 进行写操作前必须先解锁 解锁操作也就是必 须在 FLASH KEYR 寄存器写入特定的序列 0X45670123 和 0XCDEF89AB 固件库 提供了一个解锁
  • nginx(六十七)http_ssl模块 client与nginx的ssl握手

    一 HTTPS握手机制 关注点 SSL TLS握手 的细节与nginx 配置指令 的关系 核心 讲解 客户端 下游 与作为 server 端的nginx之间的 握手 最佳实践 建议在 http块 中通过 include ssl conf 把
  • 01-pytest-安装及入门

    目录 1 安装 2 查看版本 3 创建第一个测试 4 pytest用例规则 1 安装 pip install U pytest 2 查看版本 pytest version 或 pip show pytest 3 创建第一个测试 1 新建te
  • 分享一个QTabWidget的好看样式

    void setTabWidgetStyleSheet QTabWidget obj obj gt setStyleSheet QTabWidget background color transparent QTabWidget pane
  • python rfind函数用法_纵经千万次增删改,初心永不变

    开篇 上一期介绍了字符串及其切片用法 相信你已经掌握 那么这一期 我们就来学习一下字符串的增删改查等一系列方法 正是因为有了这些方法 你才能像呼吸一样自然地操作字符串 需要指出的是 字符串是不可变类型 也就是说 只要一个字符串确定了 那么任
  • Navicat远程连接mysql数据库

    第一 首先能ping通mysql数据库所在的主机 第二 telnet mysql数据库的端口号 如果不行 要在防火墙 高级设置里面 配置入站规则 开放3306端口 第三 如果还不行 结合下面两个网址 http blog csdn net a
  • iOS进阶_Log分类打印日志自动转换中文

    description方法是NSObject类的一个实例方法 因此所有的Object C对象都有description方法 description方法返回的永远是字符串 对于一个Person类 如果没有重写description方法 NSL