【Object-C】Object-C 的包装类

Object-C 提供了NSValue 和NSNumber来封装C语言基本类型,这样就可以让他们具有面向对象的特征。

NSInteger : 大致等于 long 型整数
NSUInteger :  相当于 unsigned long 
CGFloat : 在64位平台上相当于 double,32 为平台上相当于 float

NSValue 和NSNumber 都是包装类
1、NSValue 是NSNumber的基类,代表一个更通用的包装类,可以用于包装单个short,int,long,char,id,指针等数据类型

2、NSNumber 是更具体的包装类,主要用于包装C语言的各种数值类型,主要包含下列三个方法:
     a  .   + numberWithXxx : 将特定类型的值包装成NSNumber。
     b  .   -initWithXxx : 该实例方法需要创建一个NSNumber对象,再用一个基本类型的值
            来初始化NSNumber。
     c  .  -xxxValue : 该实例方法返回该NSNumber对象包装的基本类型的值

其类方法如下:
@interface  NSNumber :  NSValue

- (
instancetype )initWithCoder:( NSCoder  *)aDecoder  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithChar:( char )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithUnsignedChar:( unsigned  char )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithShort:( short )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithUnsignedShort:( unsigned  short )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithInt:( int )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithUnsignedInt:( unsigned  int )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithLong:( long )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithUnsignedLong:( unsigned  long )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithLongLong:( long  long )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithUnsignedLongLong:( unsigned  long  long )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithFloat:( float )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithDouble:( double )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithBool:( BOOL )value  NS_DESIGNATED_INITIALIZER ;
- (
NSNumber  *)initWithInteger:( NSInteger )value  NS_AVAILABLE ( 10 _5,  2 _0)  NS_DESIGNATED_INITIALIZER ;
- (NSNumber *)initWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0) NS_DESIGNATED_INITIALIZER;

程序实例:
//
//  main.m
//  OC 包装类
//
//  Created by mac on 14-11-29.
//  Copyright (c) 2014   mac. All rights reserved.
//

#import  <Foundation/Foundation.h>
int  main( int  argc,  const  char  * argv[]) {
   
  @autoreleasepool  {
       
  // insert code here...
       
  NSLog ( @"Hello, World!" );
       
       
  //  调用类方法将 int 类型的值包装成 NSNumber 对象
       
  NSNumber * num = [[ NSNumber  alloc ]  initWithInt : 28 ];
       
  NSLog ( @"%@"  , [num  class ]);
       
       
  //  调用类方法将 double 类型的值包装成 NSNumber 对象
       
  NSNumber * de = [ NSNumber  numberWithDouble :  3.14 ];
       
  NSLog ( @"%d"  , [num  intValue ]);
       
  NSLog ( @"%g"  , [de  doubleValue ]);
       
       
  //  先创建 NSNumber 对象,再调用 initWithXxx 方法执行初始化
       
  NSNumber * ch = [[ NSNumber  alloc ]  initWithChar : 'b' ];
       
       
  NSLog ( @"%@" ,[ch  class ]);
       
  //  直接输出 NSNumber 对象,使用 %@ 格式字符串
       
  NSLog ( @"%@"  , ch);
       
       
  NSInteger  m =  10  ; // 相当于 long  类型
       
  NSLog ( @"%li" ,m);

    }
   
  return  0 ;
}

===>
2014-11-29 17:13:58.491 OC 包装类 [1430:303] Hello, World!
2014-11-29 17:13:58.492 OC
包装类 [1430:303] __NSCFNumber
2014-11-29 17:13:58.493 OC
包装类 [1430:303] 28
2014-11-29 17:13:58.494 OC
包装类 [1430:303] 3.14
2014-11-29 17:13:58.495 OC
包装类 [1430:303] __NSCFNumber
2014-11-29 17:13:58.495 OC
包装类 [1430:303] 98
2014-11-29 17:13:58.496 OC
包装类 [1430:303] 10
Program ended with exit code: 0

转载于:https://www.cnblogs.com/shujucn/p/7481472.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值