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

Objective-C 基礎:NSNumber 包裝基本數據類型詳解

     編輯:關於C++

在 Objective-C 中,集合類(NSArray、NSDictionary 等)只能存儲對象。NSNumber 是專門用於包裝基本數據類型(int、float、BOOL、char 等)的類,使其能夠存入集合、進行對象化操作。本文詳細介紹 NSNumber 的創建、取值、字面量語法及運算用法。

核心功能:基本類型 ↔ 對象

1. 傳統創建方法

int intValue = 100;
float floatValue = 3.14;
BOOL boolValue = YES;

NSNumber *intNumber = [[NSNumber alloc] initWithInt:intValue];
NSNumber *floatNumber = [NSNumber numberWithFloat:floatValue];
NSNumber *boolNumber = [NSNumber numberWithBool:boolValue];

2. 現代字面量語法(推薦)

自 Clang 3.1 / Xcode 4.4 起支援,更簡潔:

NSNumber *intNum = @80;           // 等價於 initWithInt:80
NSNumber *floatNum = @3.14;       // 等價於 numberWithFloat:3.14
NSNumber *boolNum = @YES;         // 等價於 numberWithBool:YES
NSNumber *charNum = @'a';         // 等價於 numberWithChar:'a'

3. 取回基本類型值

float value = [floatNumber floatValue];
int value2 = [intNumber intValue];
BOOL b = [boolNumber boolValue];

進階用法

存入集合

NSArray *arr = @[intNumber, floatNumber, boolNumber];
NSLog(@"arr = %@", arr); // 正常輸出對象

表達式運算

字面量支援括號內表達式:

NSNumber *result = @(1 + 2); // 值為 3
NSArray *mixed = @[@"string", @12, intNum, floatNum, boolNum, charNum, result];

常用數值類型對應表

基本類型工廠方法字面量示例取值方法
intnumberWithInt:@42intValue
floatnumberWithFloat:@3.14ffloatValue
doublenumberWithDouble:@3.14doubleValue
BOOLnumberWithBool:@YES / @NOboolValue
charnumberWithChar:@'c'charValue
longnumberWithLong:@100LlongValue
long longnumberWithLongLong:@100LLlongLongValue
unsigned intnumberWithUnsignedInt:@100UunsignedIntValue

注意事項

  • 不可變性:NSNumber 實例創建後不可修改內部值。
  • 類型安全:取值時調用錯誤方法(如用 intValue 取 float)會截斷或導致未定義行為。
  • @() 表達式:括號內可為任意合法 C 表達式,編譯器自動推導類型並生成對應 NSNumber。
  • 橋接:在 ARC 下,NSNumber 與 CFNumber 可免費橋接轉換。

總結

NSNumber 是 Objective-C 基本類型進入對象體系的橋樑。掌握字面量語法(@...)與取值方法(xxxValue)是日常開發的基本功。配合集合類使用時,記住「存入前包裝,取出後解包」的模式即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved