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

Objective-C 數據類型完全指南:基本類型、對象類型與 id 萬能類型

     編輯:關於C語言

前言:Objective-C 類型系統的三層架構

Objective-C 繼承 C 的基本類型,並引入對象模型。類型系統分為:基本數據類型 (C 兼容)、對象類型 (類/協議指針)、id 類型 (動態綁定萬能指針)。本文系統梳理各類型定義、格式化輸出、限定詞擴展、實戰代碼示例。

一、 基本數據類型 (C 兼容層)

1. 整數類型

類型格式符示例說明
int%i / %d100設備相關寬度 (通常 32 位)
long int%li131071100L至少 32 位,後綴 L/l
long long int%lli1234567890123LL至少 64 位
short int%hi32000通常 16 位
unsigned int%u0xFFU無符號,後綴 U/u

十六進制:0xFFED0D,八進制:%o,十六進制帶前綴:%#x。

2. 浮點類型

類型格式符示例說明
float%f / %e / %g13.5f / 1.7e4單精度,後綴 f/F,科學計數法 e/E
double%f / %e / %g8.44e+11雙精度,通常 64 位
long double%Lf / %Le / %Lg1.234e+7L擴展精度,後綴 L/l

3. 字符類型

  • char:單字符,單引號 'A',格式符 %c。
  • 轉義字符:\n \t \\ \" \' \0 等。
  • signed char / unsigned char:當作小整數用 (範圍 -128~127 / 0~255)。

二、 對象類型與 id 萬能類型

1. 對象類型:類指針

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// NSAutoreleasePool 是類,* 表示指針類型
// 實際上所有對象變量都是指針

2. id 類型:動態綁定的通用對象指針

id pool = [[NSAutoreleasePool alloc] init]; // 等價
id anyObject = @"string";  // 可指向任何對象
// id 不能指向基本類型 (int/float/struct)
  • id 定義為 typedef struct objc_object *id;。
  • 編譯期不檢查消息發送,運行時動態解析 (動態類型系統核心)。
  • 集合類 (NSArray/NSDictionary) 存儲的均為 id。

三、 限定詞擴展類型體系

在基本類型前添加限定詞,構建豐富類型譜系:

  • 長度:long, long long, short
  • 符號:signed, unsigned
  • 組合示例:unsigned long long int (64 位無符號),long double (擴展浮點)。

四、 實戰代碼示例

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
    @autoreleasepool {  // 現代 ARC 寫法
        int integerVar = 100;
        float floatingVar = 331.79f;
        double doubleVar = 8.44e+11;
        char charVar = 'W';
        
        NSLog(@"integerVar = %i", integerVar);
        NSLog(@"floatingVar = %f", floatingVar);
        NSLog(@"doubleVar = %e", doubleVar);  // 科學計數法
        NSLog(@"doubleVar = %g", doubleVar);  // 自動選擇 %f/%e
        NSLog(@"charVar = %c", charVar);
    }
    return 0;
}

輸出:

integerVar = 100
floatingVar = 331.790009
doubleVar = 8.440000e+11
doubleVar = 8.44e+11
charVar = W

五、 現代最佳實踐建議

  1. 固定寬度優先:使用 int32_t, uint64_t, intptr_t (stdint.h) 替代 int/long,消除平台差異。
  2. 浮點用 double:除非內存/帶寬極度敏感 (GPU/嵌入式),默認 double 精度更高、性能無損。
  3. 字符用 NSString:Objective-C 開發中幾乎不直接用 char*,統一 NSString (Unicode 就緒、內存管理、豐富 API)。
  4. 集合用泛型註釋:NSArray *names (Xcode 7+),靜態分析捕獲類型錯誤。
  5. id 謹慎使用:API 邊界/委托/集合元素用 id,內部邏輯盡量用具體類型/協議 id。

六、 總結

Objective-C 類型系統 = C 基本類型 (性能底座) + 對象指針類型 (OO 抽象) + id 動態類型 (極致靈活)。掌握格式化輸出、限定詞組合、id 與靜態類型的邊界,能寫出既高效又安全的現代 Objective-C 代碼。

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