NSNumber类

作者:追风剑情 发布于:2019-2-27 17:18 分类:Objective-C

NSNumber的创建方法和检索方法
创建和初始化方法 初始化实例方法 检索实例方法
numberWithChar: initWithChar: charValue
numberWithUnsignedChar: initWithUnsignedChar: unsignedCharValue
numberWithShort: initWithShort: shortValue
numberWithUnsignedShort: initWithUnsignedShort: unsignedShortValue
numberWithInteger: initWithInteger:
integerValue
numberWithUnsignedInteger: initWithUnsignedInteger:
unsignedIntegerValue
numberWithInt: initWithInt:
intValue
numberWithUnsignedInt: initWithUnsignedInt:
unsignedIntValue
numberWithLong: initWithLong:
longValue
numberWithUnsignedLong: initWithUnsignedLong:
unsignedLongValue
numberWithLongLong: initWithLongLong:
longlongValue
numberWithUnsignedLongLong: initWithUnsignedLongLong:
unsignedLongLongValue
numberWithFloat: initWithFloat:
floatValue
numberWithDouble: initWithDouble:
doubleValue
numberWithBool: initWithBool:
boolValue


注意:在Xcode 4.2之前的版本,使用哪个版本的方法是很重要的,有一类方法创建的对象是会自动释放的,然而使用alloc版本创建的对象需要在使用完后自己负责释放(在IOS中)。随着Objective-C中引入了自动引用计数(ARC),已经能够自动处理内存管理,就不再偏向于使用某一类方法。


示例一:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSNumber *myNumber, *floatNumber, *intNumber;
        // NSInteger不是一个对象,而是基本数据类型的typedef。
        // 它实际上是64位的long或者32位的int。NSUInteger也是类似的typedef
        NSInteger myInt;
        
        // integer 型值
        intNumber = [NSNumber numberWithInteger: 100];
        myInt = [intNumber integerValue];
        NSLog(@"%li", (long) myInt);
        
        // long 型值
        myNumber = [NSNumber numberWithLong: 0xabcdef];
        NSLog(@"%lx", [myNumber longValue]);
        
        // char 型值
        myNumber = [NSNumber numberWithChar: 'X'];
        NSLog(@"%c", [myNumber charValue]);
        
        // float 型值
        floatNumber = [NSNumber numberWithFloat: 100.00];
        NSLog(@"%g", [floatNumber floatValue]);
        
        // double 型值
        myNumber = [NSNumber numberWithDouble: 12345e+15];
        NSLog(@"%lg", [myNumber doubleValue]);
        
        // 发生错误
        NSLog(@"%li", (long) [myNumber integerValue]);
        
        // 验证两个Number是否相等
        if ([intNumber isEqualToNumber: floatNumber] == YES)
            NSLog(@"Numbers are equal");
        else
            NSLog(@"Numbers are not equal");
        
        // 验证一个Number是否小于、等于或大于另一个Number
        // compare函数的返回值:
        // 小于 返回NSOrderedAscending
        // 等于 返回NSOrderdSame
        // 大于 返回NSOrderedDescending
        if ([intNumber compare: myNumber] == NSOrderedAscending)
            NSLog(@"First number is less than second");
    }
    return 0;
}

运行测试

111.png

示例二:通过@表达式创建数字对象

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSNumber *myNumber, *floatNumber, *intNumber;
        NSInteger myInt;
        
        // 注意:如果在@之后的值是一个表达式或者变量需要使用括号。
        // NSDecimalNumber是NSNumber的子类,在对象层面提供了一些数字的四则运算方法。
        
        // 整型 integer
        intNumber = @100;
        myInt = [intNumber integerValue];
        NSLog(@"%li", (long) myInt);
        
        // 长整型 long integer
        myNumber = @0xabcdefL;
        NSLog(@"%lx", [myNumber longValue]);
        
        // 字符型 char
        myNumber = @'X';
        NSLog(@"%c", [myNumber charValue]);
        
        // 浮点型 float
        floatNumber = @100.0f;
        NSLog(@"%g", [floatNumber floatValue]);
    }
    return 0;
}

运行测试
111.png


标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号