zoukankan      html  css  js  c++  java
  • 数字类型(NSInteger,NSUInteger,NSNumber)

    在Objective-C中,我们可以使用c中的数字数据类型,int、float、long等。它们都是基本数据类型,而不是对象。也就是说,不能够向它们发送消息。然后,有些时候需要将这些值作为对象使用。

    NSInteger、NSUInteger

    当你不知道程序运行哪种处理器架构时,你最好使用NSInteger,因为在有可能int在32位系统中只是int类型,而在64位系统,int可能变是long型。除非不得不使用int/long型,否则推荐使用NSInteger。

    从上面的定义可以看出NSInteger/NSUInteger是一种动态定义的类型,在不同的设备,不同的架构,有可能是int类型,有可能是long类型。

    NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

    NSNumber

    有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?
    NSNumber可以将基本数据类型包装起来,形成一个对象,这样就可以给其发送消息,装入NSArray中等。

    Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。

    将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

    NSValue类

    我 们说像数组这样的Foundation集合只能存储对象,不能存储像int这样的基本数据类型.但是我们往往也会有这样的需求,例如需要将CGPoint 或是CGRect这样的结构存储在集合中.一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数 据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就是允许以上数据类型的数据结构能够被添加到集合里.这种结构转化为对象的方式,不就是java中的装箱(boxing) 吗?不过在Objective-C中称为包装(wraping),相反的,从对象中解出基本类型,称为展开(unwraping),在java中叫拆箱 (unboxing).

    NSNumber 继承自NSObject,可使用compare、isEqual等消息。
    NSNumber是NSValue的子类。NSValue可包装任意类型值。

    前面我们也介绍了Objective-C中的一些特殊数据类型:Objective-C入门教程05:特殊数据类型
    更多关于NSValue的信息可以查看官方文档:NSValue Class Reference
    更多信息可以参考:Foundation Data Types Reference

  • 相关阅读:
    友盟—安卓巴士【Android开发原创教程大赛】
    iOS开发视频教程下载/iphone开发视频教程下载
    发一个Android开发的外包项目。欢迎外包团队来骚扰
    安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
    安卓巴士精选Android开发教程
    做了一个系列的Android开发教程列表
    深刻理解C#的传值调用和传引用调用
    《CLR Via C# 第3版》笔记之(四) 类中字段的默认赋值
    《CLR Via C# 第3版》笔记之(七) const和readonly
    《CLR Via C# 第3版》笔记之(十二) 事件
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3311848.html
Copyright © 2011-2022 走看看