iOS简单使用description方法(参考大神博客+自己想法)

iOS description 我们在使用NSLog 和 %@ 输出某个对象时,就会调用这个对象的 description 方法,它的返回值就是 NSString 字符串类型,所以 description 默认实现返回的格式是 类名: 对象的内存地址>例如:partner : 0x7facbe12070> 不要在 description 方法中同时使用 %@ 和 self,如果这样使用了,那么最终会 阅读详情

  简单的说说ios中的description方法,在iOS中description方法是一个非常实用的方法,在调试程序时,经常要打印并查看对象的信息。一种办法是编写代码把对象的全部属性都输出到日志中。但是最常用的还是:

NSLog(@"%@",object);

在构建需要打印的日志的字符串时,object对象会收到description消息,该方法返回的描述信息将取代“格式字符串里的%@”。如下:

NSArray *arr = @[@"Tom",@"Jerry",@"Kitty"];
NSLog(@"%@",arr);

输出结果:

(
    Tom,
    Jerry,
    Kitty
)
有的时候如果我们要自定义类,那么我们要用到description方法时就要覆写description才能更有意义,如果不重写这个方法就会调用NSObject类实现的默认方法。这个方法定义在NSObject协议里,不过NSObject累也实现了它。因为NSObject并不是唯一的“根类”,所以许多方法都要定义在NSObject协议里。下面就是覆写description方法:

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ %@",_firstName,_lastName];
}
在这个的firstName和lastName是类中的属性。调用如下:

User *user = [[User alloc] initWithFirstName:@"Jame" lastName:@"Jan"];
NSLog(@"%@",user);
打印的结果如下:

 Jame Jan

这样就能过通过description方法得到更多需要的信息了,但是这样还是有一定的问题的,当我们想输出多个值的时候,会使数据变得可读性较差,那么我们可以通过字典的方式作为description的返回值:

-(NSString *)description
{
    return [NSString stringWithFormat:@"%@ ",@{
                                               @"name":_name,
                                               @"age":@(_age),
                                               @"sex":_sex
                                               };
}
这样直接为实例变量留好位置,然后逐个打印出来,用字典来实现这个功能可以令代码更易于维护:如果以后还要向类中新增属性,要在description中打印,只更改字典就可以了。

NSObject协议中还有一个方法,那就是debugDescription,这个方法和description相似,区别就在debugDescription方法是开发者在调试器中以控制台命令打印对象时才调用的。在NSObject类的默认实现中,此方法只有直接调用了description。

通过设置断点的方式,在控制器中通过如:po user 这样的方法就能打印出debugDescription方法中的描述信息,有的时候我们只是想把简单的信息放在普通的描述信息中,而把更详尽的内容放在调试所用的描述信息里,这样就要重写两个方法,在description中返回简单信息,在debugDescription返回详尽的信息并通过po命令打印。

还有一个问题就是在输出数组的中存在中文的时候就是以utf-8的形式输出,所以在这里可以用方法搅拌的方式进行转换格式。

我们就以数组为例:

首先创建一个NSObject的类别同时要加上头文件

#import <objc/runtime.h>

添加代码如下:
+ (void)sjt_exchangeSelector:(SEL)oldSel andNewSelector:(SEL)newSel {
    Method oldMethod =  class_getInstanceMethod([self class], oldSel);
    Method newMethod  = class_getInstanceMethod([self class], newSel);
    // 改变两个方法的具体指针指向
    method_exchangeImplementations(oldMethod, newMethod);
}

然后再创建一个NSArray的类别添加代码如下:
+ (void)load {
    // 该方法会在加载这个类的时候执行(APP启动时会加载,只执行一次)
    // 此处交换descriptionWithLocale:与自己写的my_descriptionWithLocale:的方法指针
    [self sjt_exchangeSelector:@selector(descriptionWithLocale:) andNewSelector:@selector(my_descriptionWithLocale:)];
}

- (NSString *)my_descriptionWithLocale:(id)locale {
    NSString *desc = [self my_descriptionWithLocale:locale];
    desc = [self replaceUnicode:desc];
    return desc;
}

- (NSString *)replaceUnicode:(NSString *)unicodeStr {
    NSString *tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
    NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData
                                                           mutabilityOption:NSPropertyListImmutable
                                                                     format:NULL
                                                           errorDescription:NULL];
    return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"\n"];
}

这样就能够正常的现在中文了,不需要其他操作


iOS编译时出现的错误和解决办法 个人总结的一些在Xcode进行编译时容易出现的错误及其解决办法 立即下载

相关推荐

第四章 汇川技术InoProShop入门之串口自由协议解读

摘要: 串口自由协议是工业自动化中针对特定需求设计的自定义通信协议,具有高度灵活性和针对性,适用于小型设备、实时控制等场景。其核心包括自定义帧结构(起始符、地址码、数据区、校验位等)和通信规则(波特率、交互机制)。相比标准协议,自由协议效率更高但兼容性弱,设计时需注重可靠性、效率和可扩展性,适用于定制化或高实时性需求,如传感器数据采集或老旧设备改造。典型应用需平衡精简帧结构与抗干扰能力,同时预留扩展空间。

zyfucking2010的博客 2212

图文讲解:iOS App提交流程(1)

一、证书的导出 1.1、前期工作 首先你需要有一个苹果的开发者帐号,一个Mac系统。 如果没有帐号可以在打开http://developer.apple.com/申请加入苹果的开发者计划。支付99美元每年,怎么申请网上有详细的介绍,在此不多做介绍。 如果你已经有了一个IDP,打开http://developer.apple.com/并登录到苹果MemberCenter,见下

灰太狼 763

[模型部署]-[LLM]昇腾部署Qwen3-Coder-30B-A3B-Instruct

摘要:本文介绍了在Ascend NPU上部署Qwen3-Coder-30B-A3B-Instruct大模型的实践过程。通过vLLM-Ascend框架,详细说明了环境准备(CANN 8.1、PyTorch-NPU 2.5.1等)、模型下载、容器启动及服务部署步骤,包括vLLM服务的启动参数配置和接口测试方法。测试结果显示在当前2卡910B3配置下性能表现仅为8token/s(1并发),并指出流式调用时存在无法输出usage信息的问题。该方案为Ascend平台私有化部署大模型推理服务提供了参考实现。

1668

iOS description方法和descriptionWithLocale:方法 解决中文现问题

在输出字符串、一些基本数据类型以及 OC 对象,我们都可以使用 NSLog 函数进行输出。本次主要谈谈使用NSLog输出 OC 对象的应用。       一般情况下,我们在使用NSLog 和 %@ 输出某个对象时,就会调用这个对象的 description 方法,它的返回值就是 NSString 字符串类型,所以 description 默认实现返回的格式是 &lt;类名: 对象的内存地址&gt;...

代码解释生活 4748

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8733

AUTOSAR系统服务篇 - BswM的使用

本文档是对4.0.3版及更高版本的AUTOSAR模式管理应用的介绍。其主要目的是为AUTOSAR的用户和开发人员提供基于示例的AUTOSAR模式管理不同方面的详细概述,这些示例在文中进行了解释。本文中的代码清单共同构成了示例ECU的配置。第2章解释了基础的模式管理概念,例如一般的模式、如何实现模式切换、模式管理者和模式用户的角色等。其次介绍了应用模式管理和基础软件模式管理的依赖关系,两者密切相关。基础软件模式管理器是AUTOSAR R4.0中的中央模式管理模块。它具有很高的可配置性。

IOT2017的博客 846

iOS: NSDictionary的方法descriptionWithLocale:

- (NSString *)descriptionWithLocale:(id)locale

Alisa200920的专栏 1357

Android Camera MTK框架

Camera简介: 虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。 ...

weixin_49303682的博客 5506

iOS NSPropertyListSerialization和NSJSONSerialization

Foundation 框架提供了 NSPropertyListSerialization 类处理plist文件 list 对象指 NSString,NSArray,NSDictionary,NSDate,NSNumber等数据形式 NSPropertyListSerialization 的作用: list对象转换NSData + (nullable id)propertyListWithDa...

培根芝士的专栏 1031

【Matlab算法】MATLAB实现的语音信号降噪算法(附MATLAB完整代码)

语音信号降噪是语音处理领域中的一个关键问题。在实际应用中,语音信号常常被各种环境噪声污染,这不仅影响了语音的质量,还可能导致后续处理(如语音识别)的性能下降。因此,开发有效的降噪算法对于提高语音通信质量、改善语音识别系统性能等具有重要意义。 本文将介绍并实现两种经典的语音信号降噪算法:谱减法和维纳滤波。这两种方法都是基于频域处理的技术,具有实现简单、计算效率高的特点。通过MATLAB实现这些算法,我们可以直观地比较它们的性能和降噪效果。

Albert_Lsk的博客 1327

华为OD机试双机位C卷-FLASH坏块监测系统(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【FLASH坏块监测系统】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - FLASH坏块监测系统。

qq_45776114的博客 1928

ios 证书申请2

目录 苹果开发帐号说明 苹果证书和X5打包服务器的配合使用 iOS证书申请教程 苹果证书和极光推送的配合使用   苹果开发帐号说明 个人账号(Individual)/公司团队账号 (Company/Organization): 费用都是99美金一年,两者无本质区别,都可以发布应用到苹果市场。 区别在于个人账号在App Store销售者只能显示个人的ID,比如san zhang

yangzm的专栏 999

FISCO BCOS 三、多群组部署以及新节点加入群组

本章主要以星形组网和并行多组组网拓扑为例,指导您了解如下内容:了解如何使用创建多群组区块链安装包;了解创建的多群组区块链安装包目录组织形式;学习如何启动该区块链节点,并通过日志查看各群组共识状态;学习如何向各群组发送交易,并通过日志查看群组出块状态;了解群组内节点管理,包括节点入网、退网等;了解如何新建群组。

qq_63235624的博客 2919

iOS: NSDictionary的方法description

- (NSString *)description

Alisa200920的专栏 962

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS description方法的使用介绍

description 方法的使用介绍

Sue 3628

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS 简单总结:description方法\NSLog函数

1.description方法是NSObject自带的方法,包括类方法和对象方法 + (NSString *)description; // 默认返回 类名 - (NSString *)description; // 默认返回 <类名:内存地址> 2.默认情况下利用NSLog和%@输出对象的时返回的就是类名和内存地址 3.修改NSLog和%@的默认输出:重写类...

dongduan5679的博客 201

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

iOS之包装类、description方法、==或isEqual

这里写目录标题前言三个类型包装类NSValue 和 NSNumber包装类代码示例description 方法1.description 方法简介2. 重写description== 或 isEqual : 方法isEqual的重写 前言 Objective- C提供了NSValue、NSNumber来封装c语言的基本类型,这样就可以让他们具有面向对象的特征 三个类型 NSInteger:大致等于long型整数 NSUInteger:大致等于unsigned long 型整数 CGFLoat:大致相当于d

weixin_61558111的博客 2814

iOS基础:description方法重写

一、介绍 description方法是NSObject类的一个实例方法,因此所有的Object-C对象都有description方法。description方法返回的永远是字符串。 description方法的作用是打印对象跟Java里的toString有点类似。对于一个Person类,如果没有重写description方法,NSLog(@“%@”,p),输出的是p的地址,而我们想要的效果是打

gongwutianya的博客 5886

iOS 简单总结:description方法/NSLog函数

1.description方法是NSObject自带的方法,包括类方法和对象方法 + (NSString *)description; // 默认返回 类名- (NSString *)description; // 默认返回 2.默认情况下利用NSLog和%@输出对象的时返回的就是类名和内存地址 3.修改NSLog和%@的默认输出:重写类对象或者实例对象的description方

cym_bj 722

iOS 教你写通用的description方法

/** * @property (readonly, copy) NSString *description; * description是NSObject的一个只读属性,对于一般的属性都会有getter和setter方法,但是readonly的属性顾名思义就只有getter方法啦。 * 当你在XCode控制台使用po命令打印一个对象的时候,如果没有重写description方法,往往打印出的

Mo_Mo123的博客 3025

IOS中的swift和oc关于对象模型的description方法重写

IOS中的swift和oc关于对象模型的description方法重写 先讲OC的,oc比较重要,放在最前面. 首先创建一个cocoa Touch Class,继承NSObject, 命名Person 点h文件写几个属性 #import <Foundation/Foundation.h> @interface AHLJPerson : NSObject @property(nonatomic,copy)NSString * name; @property(nonatomic,assign)int

A1521315qwss的博客 852

iOS: NSData的方法description

- (NSString *)description 返回值是NSString对象,将调用这个方法的对象的内容用十六进制的格式表现出来。

Alisa200920的专栏 2165

ios-description方法

其实在这里我补充下alloc是静态方法是类方法,而init是动态方法也就是对象的方法,比如说[Student alloc[init],因为我们init是通过类名 alloc了,相当于已经创建了一个对象由对象来调用init方法了。 我们如果想用%@来打印对象时,就会调用description方法,我们可以重写父类的description方法。-(NSString *)description {

rv0p111 529

自定义构造方法和description方法

本文目录 知识回顾一、自定义构造方法二、description方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C。如果你还没有编程经验,或者对Objective-C、iOS开发不感兴趣,请忽略。学习本专题之前,建议先学习C语言专题。 回到顶部 知识回顾 在第5讲中已经介绍了如何定义类和

lqk的博客 2254

【iOS】——处理对象(打印对象和description)

打印对象和description方法 1.description方法是NSObject类的一个实例方法,所有的Objective-C类都是NSObject类的子类,因此,所有的Objective-C都具有description方法。 2.description方法通常用于实现一个功能:当程序直接打印该对象时,系统会输出该对象的“自我描述”信息,用于告诉外界该对象具有的状态信息。 3.NSObject类提供的desription方法总是返回该对象的首地址,这个返回值并不能实现“自我描述”的功能,因此,如果用

weixin_50990189的博客 712
上一篇: iOS 代码规范(参考大神博客+自己想法)
下一篇: 关于GCD总结(参考大神博客+自己想法)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值