• 【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
  • 相关阅读:
    ctfhub技能树—文件上传—双写后缀
    ctfhub技能树—文件上传—00截断
    ctfhub技能树—文件上传—文件头检查
    ctfhub技能树—文件上传—MIME绕过
    ctfhub技能树—文件上传—.htaccess
    ctfhub技能树—文件上传—前端验证
    ctfhub技能树—文件上传—无验证
    ctfhub技能树—sql注入—Refer注入
    ctfhub技能树—sql注入—UA注入
    面试中被问到的知识点
  • 原文地址:https://www.cnblogs.com/shujucn/p/7481472.html
Copyright © 2020-2023  润新知