MST
星途 面试题库

面试题:Objective-C指针类型转换语法基础

在Objective-C中,如何将一个`NSNumber *`类型的指针转换为`int`类型?请写出具体代码,并解释转换过程中可能遇到的问题及如何解决。
36.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现
NSNumber *number = @(10);
int intValue = [number intValue];
  1. 转换过程及可能遇到的问题与解决方法
    • 转换过程NSNumber是一个对象类型,它可以包装各种基本数据类型。通过调用intValue方法,我们可以从NSNumber对象中提取出包装的int值。NSNumber对象内部有存储数据的机制,intValue方法就是获取存储的int类型数据的接口。
    • 可能遇到的问题
      • 如果NSNumber对象包装的数据类型不是int类型,例如包装的是floatdouble或者其他类型,调用intValue方法会进行类型转换。从floatdouble转换为int时会丢失小数部分,可能导致数据精度损失。
      • 如果NSNumber对象为nil,调用intValue方法会导致程序崩溃,因为向nil发送消息在Objective - C中会引发EXC_BAD_ACCESS错误。
    • 解决方法
      • 对于精度损失问题,如果需要精确转换,在创建NSNumber对象时就要考虑数据类型的一致性。如果不确定NSNumber对象包装的数据类型,可以在转换前使用number.isKindOfClass:[NSNumber class]判断是否为NSNumber对象,然后使用number.objCType获取其实际包装的数据类型,根据类型再决定如何转换。
      • 对于NSNumber对象为nil的情况,在调用intValue方法前,需要先进行判空处理,例如:
NSNumber *number = nil;
if (number) {
    int intValue = [number intValue];
} else {
    // 处理number为nil的情况,例如给intValue赋一个默认值
    int intValue = 0;
}