首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C NSNumber 完整指南:基本類型裝箱/拆箱、常用方法速查表

     編輯:關於C語言

為什麼需要 NSNumber

C 基本類型(int、float、BOOL 等)非對象,無法存入集合(NSArray、NSDictionary)、無法發送消息。NSNumber 為其提供對象包裝器。

創建實例(裝箱)

實例方法

NSNumber *num1 = [[NSNumber alloc] initWithInt:10];
NSNumber *num2 = [[NSNumber alloc] initWithFloat:10.8f];
NSNumber *num3 = [[NSNumber alloc] initWithBool:YES];
// 完整列表見下表

類方法(便利構造器)

NSNumber *num1 = [NSNumber numberWithInt:10];
NSNumber *num2 = [NSNumber numberWithFloat:10.8f];
NSNumber *num3 = [NSNumber numberWithBool:YES];
// 推薦:語法簡潔,自動管理內存(ARC 環境下)

取回基本值(拆箱)


int i = [num1 intValue];
float f = [num2 floatValue];
BOOL b = [num3 boolValue];
// 完整列表見下表

完整方法速查表

基本類型裝箱 (initWith...)裝箱 (numberWith...)拆箱 (...Value)
charinitWithChar:numberWithChar:charValue
unsigned charinitWithUnsignedChar:numberWithUnsignedChar:unsignedCharValue
shortinitWithShort:numberWithShort:shortValue
unsigned shortinitWithUnsignedShort:numberWithUnsignedShort:unsignedShortValue
intinitWithInt:numberWithInt:intValue
unsigned intinitWithUnsignedInt:numberWithUnsignedInt:unsignedIntValue
longinitWithLong:numberWithLong:longValue
unsigned longinitWithUnsignedLong:numberWithUnsignedLong:unsignedLongValue
long longinitWithLongLong:numberWithLongLong:longLongValue
unsigned long longinitWithUnsignedLongLong:numberWithUnsignedLongLong:unsignedLongLongValue
floatinitWithFloat:numberWithFloat:floatValue
doubleinitWithDouble:numberWithDouble:doubleValue
BOOLinitWithBool:numberWithBool:boolValue
NSIntegerinitWithInteger:numberWithInteger:integerValue
NSUIntegerinitWithUnsignedInteger:numberWithUnsignedInteger:unsignedIntegerValue

完整示例


#import 

int main() {
    @autoreleasepool {
        // 創建
        NSNumber *month = [NSNumber numberWithInt:10];
        NSNumber *length = [NSNumber numberWithFloat:10.8f];
        
        NSLog(@"month = %@", month);   // 輸出: 10
        NSLog(@"length = %@", length); // 輸出: 10.8
        
        // 拆箱
        int m = [month intValue];
        float l = [length floatValue];
        
        NSLog(@"month = %d", m);       // 10
        NSLog(@"length = %.1f", l);    // 10.8
    }
    return 0;
}

進階特性

  • 不可變:創建後值不能修改
  • 字符串轉換:[NSNumber numberWithInt:42].stringValue → @"42"
  • 比較:[num1 compare:num2] 返回 NSComparisonResult
  • 數學運算:無直接運算符重載,需拆箱計算後再裝箱
  • @ 字面量語法 (Clang 3.1+):@42、@3.14f、@YES 等價於 [NSNumber numberWith...]

性能提示

  • 小整數(-1 到 127)可能被緩存,@(5) == @(5) 可能為 YES
  • 頻繁裝箱/拆箱有開銷,熱路徑優先用基本類型
  • NSValue 用於包裝結構體(CGRect、CGPoint 等)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved