NSNumber NSValue NSNull

Objective-C 数据封装
本文介绍在Objective-C中如何使用NSArray和NSDictionary存储基本类型数据的方法,包括利用NSNumber进行装箱、NSValue存储复杂类型及NSNull表示空值。

NSArray和NSDictionary只能存储对象,不能直接存储基本类型,如int、float 等...。但可以用对象来封装基本数值。

例如,将int型数据封装到一个对象中,然后就可以将这个对象放入NSArray或NSDictionary中了。

类似java中的封箱.


1)NSNumber
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
例如以下创建方法: 

  1. + (NSNumber *) numberWithChar: (char) value;
  2. + (NSNumber *) numberWithInt: (int) value;
  3. + (NSNumber *) numberWithFloat: (float) value;
  4. + (NSNumber *) numberWithBool: (BOOL) value;


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

  1. - (char) charValue;
  2. - (int) intValue;
  3. - (float) floatValue;
  4. - (BOOL) boolValue;
  5. - (NSString *) stringValue;


术语:将一个基本类型的数据包装成对象叫做装箱(boxing),从对象中提取基本类型的数据叫做取消装箱或拆箱(unboxing)。Objective-C不支持自动装箱。


2)NSValue
NSNumber实际上是NSValue的子类,NSValue可以包装任意值。可使用下面的类方法创建新的NSValue: 

  1. + (NSValue *) valueWithBytes: (const void *) value
  2.             objCType: (const char *) type;


传递的参数是你想要包装的数值的地址(如一个NSSize或你自己的struct),通常得到的是你想要存储的变量的地址(在C语言中使用操作符&).你也可以提供一个用来描述这个数据类型的字符串(参数objCType),通常用来说明struct中实体的类型和大小。不需要自己写这个字符串,@encode编译器指令可以接收数据类型的名称并生成合适的字符串。所以按照如下方式把NSRect放入NSArray中: 

  1. // 将NSRect放入NSArray中
  2.     NSRect rect = NSMakeRect(1, 2, 100, 200);
  3.     NSValue *rectValue = [NSValue valueWithBytes:&rect
  4.                         objCType:@encode(NSRect)];
  5.     [array addObject:rectValue];
  6.   
  7.     // 使用getValue提取数值
  8.     // 传递参数为要存储这个数值的变量的地址
  9.     rectValue = [array objectAtIndex: 0];
  10.     [rectValue getValue:&rect];


在上面的getValue: 例子中,方法名中的get表明我们提供的是一个指针,而指针所指向的空间用来存储该方法生成的数据。
Cocoa提供了将常用的struct型数据转换成NSValue的便捷方法: 

  1. + (NSValue *) valueWithPoint: (NSPoint) point;
  2. + (NSValue *) valueWithSIze: (NSSize) size;
  3. + (NSValue *) valueWithRect: (NSRect) rect;
  1. - (NSPoint) pointValue;
  2. - (NSSize) sizeValue;
  3. - (NSRect) rectValue;


例如: 

  1. value = [NSValue valueWithRect: rect];
  2. [array addObject: value];
  3. // ….
  4. NSRect anotherRect = [value rectValue];

3)NSNull
因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法: 

  1. + (NSNull *) null;


例如:

  1. [contact setObject: [NSNull null] forKey: @"home fax"];

访问如下:

    1. id homefax;
    2. homefax = [contact objectForKey: @"home fax"];
    3. if (homefax == [NSNull null]
    4. {
    5.     //...
    6. }

转载于:https://www.cnblogs.com/mohe/archive/2013/03/15/2961112.html

标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值