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

Objective-C 核心語法精粹:Block、集合排序、字面量與數值封裝

     編輯:關於C

Block(閉包)語法與捕獲語意

定義與調用

typedef int (^IntBlock)(int, int);
IntBlock add = ^(int x, int y) { return x + y; };
NSLog(@"%d", add(1, 2));  // 3

變數捕獲規則

  • 區域變數:預設值捕獲(複製),Block 內不可修改。
  • 加 __block 修飾:引用捕獲,可修改,且變數移至堆區共享。
  • 全域/靜態變數:直接引用,可自由修改。
__block int x = 10;
void (^blk)(int) = ^(int n) { x++; NSLog(@"%d", x); };
blk(5);  // x 變為 11

集合排序:Comparator Block

就地排序 sortUsingComparator:

[cars sortUsingComparator:^NSComparisonResult(Car *a, Car *b) {
    if (a.price < b.price) return NSOrderedDescending;  // 價格高到低
    if (a.price == b.price) return NSOrderedSame;
    return NSOrderedAscending;
}];

生成新陣列 sortedArrayUsingComparator:

NSArray *sorted = [cars sortedArrayUsingComparator:^NSComparisonResult(Car *a, Car *b) {
    return [a.maxSpeed compare:b.maxSpeed];  // 利用 NSNumber 比較
}];

抽取可復用 Block 變數

NSComparisonResult (^bySpeed)(Car*, Car*) = ^(Car *a, Car *b) { ... };
[cars sortUsingComparator:bySpeed];

現代字面量語法

類型舊語法字面量
字串[[NSString alloc] initWithUTF8String:"s"]@"s"
陣列[NSArray arrayWithObjects:@"a", @"b", nil]@[@"a", @"b"]
字典[NSDictionary dictionaryWithObjectsAndKeys:@"v", @"k", nil]@{@"k": @"v"}
數值[NSNumber numberWithInt:123]@123

字典取值:dict[@"key"] 替代 [dict objectForKey:@"key"]。

Block 實戰總結

  1. 排序、枚舉、回調、GCD 佇列廣泛使用 Block。
  2. 注意循環引用:__weak typeof(self) weakSelf = self; 在 Block 內使用。
  3. __block 變數在 Block 複製到堆時會一起移動,保證多個 Block 共享同一變數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved