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

Objective-C 陣列應用完整筆記:NSArray、NSNumber、自訂物件

     編輯:關於C

Foundation 框架陣列核心用法:建立、存取、類型轉換、自訂模型

Objective-C 陣列 (NSArray/NSMutableArray) 是儲存物件的核心容器,支援字面量語法、快速枚舉、關鍵值編碼等現代特性。

一、陣列建立方式

傳統初始化

NSArray *arr1 = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", nil];

現代字面量語法 (推薦)

NSArray *arr2 = @[@"one", @"two", @"three"];
NSArray *arr3 = @[@"one", @"two", @(42)]; // 混合類型:自動装箱

二、基本類型装箱

陣列只能儲存 物件指標,基本類型需包裝為 NSNumber / NSValue:

// NSNumber 工廠方法
@(42)           // 整數 -> NSNumber
@(3.14)         // 浮點數 -> NSNumber
@(YES)          // 布林 -> NSNumber
@('c')          // 字元 -> NSNumber

// 等同於
[NSNumber numberWithInt:42];
[NSNumber numberWithDouble:3.14];
[NSNumber numberWithBool:YES];
[NSNumber numberWithChar:'c'];

// 解箱
int i = [num intValue];
double d = [num doubleValue];
BOOL b = [num boolValue];
char c = [num charValue];

三、巢狀陣列與混合結構

NSArray *inner1 = @[@"a", @"b"];
NSArray *inner2 = @[@1, @2, @3];
NSArray *nested = @[inner1, inner2]; // 陣列的陣列

// 存取巢狀元素
NSString *val = nested[1][2]; // @"3" (自動轉型)

四、自訂模型物件存入陣列

Person.h

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age;
@end

Person.m

@implementation Person
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age {
    self = [super init];
    if (self) {
        _name = name;
        _age = age;
    }
    return self;
}

// 重寫 description 方便 NSLog 列印
- (NSString *)description {
    return [NSString stringWithFormat:@"姓名:%@ 年齡:%ld", _name, (long)_age];
}
@end

使用範例

Person *p1 = [[Person alloc] initWithName:@"Jack" age:15];
Person *p2 = [[Person alloc] initWithName:@"Tom" age:20];
Person *p3 = [[Person alloc] initWithName:@"Dick" age:16];

NSArray *people = @[p1, p2, p3];

// 存取
Person *p = people[1]; // 現代下標語法
NSLog(@"%@", p);       // 自動呼叫 description

// 遍歷
for (Person *person in people) {
    NSLog(@"%@", person);
}

// 包含檢查
BOOL hasJack = [people containsObject:p1]; // YES

五、常用操作速查表

操作不可變可變
建立@[...][NSMutableArray array]
元素數量[arr count]arr.count
索引存取arr[i]arr[i]
查找索引[arr indexOfObject:obj]同左
包含檢查[arr containsObject:obj]同左
新增元素不可[marr addObject:obj]
插入元素不可[marr insertObject:obj atIndex:i]
移除元素不可[marr removeObject:obj]
快速枚舉for (id obj in arr)同左
排序[arr sortedArrayUsingComparator:^][marr sortUsingComparator:^]
過濾[arr filteredArrayUsingPredicate:]同左

六、記憶體管理注意

  • ARC 環境:陣列持有元素強引用,移除元素釋放引用
  • MRC 環境:addObject: 傳入 retain,移除時 release
  • 避免循環引用:陣列不應直接/間接持有自己 (Weak 參考)

七、效能特性

  • NSArray:優化為不可變,記憶體緊湊、執行緒安全、複製極快 (Copy-on-Write)
  • NSMutableArray:動態陣列,尾部新增 O(1) 攤還,頭部插入 O(n)
  • 大量資料考慮 NSCache 或 Core Data / SQLite
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved