OC学习笔记——包装类

OC的包装类

OC是由C语言扩展而来、面向对象的编程语言。C语言中的基本数据类型(char、int、float等)都不是对象,因此没有属性、方法可以被调用。OC提供了NSValue、NSNumber来封装C语言的基本类型,这样就可以让它们具有面向对象的特征。

在进行iOS开发时,我们可能会遇到三个类型:

  • NSInteger:相当于long
  • NSUInteger:相当于unsigned long
  • CGFLoat:64位平台相当于double,32位平台相当于float

要注意,这三个类并不是包装类!它们依然只是基本类型。

NSValue和NSNumber

NSValue是更加通用的包装类,它可用于包装单个short、int、long、float、char、指针类型、对象id等数据项;通过该包装类,可以把上述数据项添加到NSarray、NSSet等集合中(这些集合要求它们的元素必须是对象)。
NSNumber则是更加具体的包装类,主要用于包装C语言中的各种数值类型,NSNumber主要包括三类方法(xxx代表某种基本数据类型):

  • +numberWithXxx: 该类方法直接将特定类型的值包装成NSNumber
  • -initWithXxx: 该实例方法需要先创建一个NSNumber对象,再用一个基本类型的值来初始化NSNumber
  • -xxxValue: 该实例方法返回该NSNumber对象包装的基本类型的值

前2类方法的功能基本相同,都是把一个基本数据类型的值包装成包装类的实例,第3类方法则用于从包装类中取出基本类型的值。

#import <Foundation/Foundation.h>

int main() {
    @autoreleasepool {
        NSNumber *num = [NSNumber numberWithInt:20];
        NSNumber *db = [NSNumber numberWithDouble:3.4];
        NSLog(@"%d", [num intValue]);
        NSLog(@"%g", [db doubleValue]);
        NSNumber *ch = [[NSNumber alloc] initWithChar:'J'];
        NSLog(@"%@", ch);
    }
}

输出:
在这里插入图片描述
虽然OC提供了类似于自动装箱的机制,如可将一个整型直接赋给NSNumber变量,但这种机制并不完善,使用自动装箱生成的NSNumber不支持ARC,而且不能将浮点数赋给NSNumber类型的变量。因此通常建议将基本类型的值包装成NSNumber对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OC(Objective-C)是一种面向对象的编程语言,它支持在类中使用方法和block。类方法是在类中定义的方法,可以直接通过类名来调用,而不需要实例化对象。而block是一种闭包,可以在代码中定义并传递给方法或函数,用于延迟执行特定的逻辑。 在OC中,可以使用类方法来创建和操作类的实例,例如通过一个工厂方法创建对象,或者在类方法中实现一些与类相关的逻辑。类方法通常使用“+”符号进行声明和实现。 而block可以在方法中作为参数传递,也可以在方法中定义和使用。block可以捕获其所在作用域的变量,可以在方法内部延迟执行一段代码,也可以用于实现回调等功能。block的定义和使用使用“^(){}”语法。 类方法和block可以结合使用,例如可以在类方法中接受一个block作为参数,并在合适的时机调用该block,以实现一些灵活的逻辑。通过类方法和block的组合,可以在OC中实现更加灵活和强大的功能,例如在异步操作中使用block来回调结果,或者在工厂方法中使用block来定制对象的初始化逻辑等。 总而言之,类方法和block是OC中的两个重要特性,它们可以分别用于类的操作和延迟执行逻辑,也可以结合使用以实现更加灵活的功能。在实际的OC开发中,类方法和block通常会被广泛使用,可以帮助开发者更加简洁和灵活地实现代码逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值