關於iOS中 遍歷一個數組的方法
阿新 • • 發佈:2018-12-25
1,最經典的 for迴圈
2 ,for in 迴圈
3.dispatch_apply
/*! 2 * @brief 例項:當要對NSArray類物件的所有元素執行處理時,不必一個一個的編寫for迴圈部分 3 */ 4 - (void)dispatchApplyTest2 { 5 //1.建立NSArray類物件 6 NSArray *array = @[@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j"]; 7 8 //2.建立一個全域性佇列 9 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 10 11 //3.通過dispatch_apply函式對NSArray中的全部元素進行處理,並等待處理完成, 12 dispatch_apply([array count], queue, ^(size_t index) { 13 NSLog(@"%zu: %@", index, [array objectAtIndex:index]); 14 }); 15 NSLog(@"done"); 16 /*! 17 * @brief 輸出結果 18 * 19 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167871] 0: a 20 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167956] 1: b 21 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167957] 3: d 22 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167871] 4: e 23 2016-02-25 19:37:17.309 dispatch_apply測試[3010:167957] 6: g 24 2016-02-25 19:37:17.309 dispatch_apply測試[3010:167871] 7: h 25 2016-02-25 19:37:17.309 dispatch_apply測試[3010:167957] 8: i 26 2016-02-25 19:37:17.309 dispatch_apply測試[3010:167871] 9: j 27 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167956] 5: f 28 2016-02-25 19:37:17.308 dispatch_apply測試[3010:167955] 2: c 29 * !!!因為在Global Dispatch Queue中執行,所以各個處理的執行時間不定 30 但done一定會輸出在最後的位置,因為dispatch_apply函式會等待所以的處理結束 31 */ 32 }
4 makeObjectsPerformSelector
一. 陣列的makeObjectsPerformSelector:SEL方法來減少自己寫迴圈程式碼. [self.answerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 1. makeObjectsPerformSelector:@select(aMethod) 簡介:讓陣列中的每個元素 都呼叫 aMethod 2. makeObjectsPerformSelector:@select(aMethod) withObject:oneObject 簡介:讓陣列中的每個元素 都呼叫 aMethod 並把 withObject 後邊的 oneObject 物件做為引數傳給方法aMethod [array makeObjectsPerformSelector:@selector(setRecurringDelegate:) withObject:self]; /*將檢測到的該自動插入的交易插入資料庫*/ [array makeObjectsPerformSelector:@selector(insertRecursion)]; /*將檢測到的該自動插入的交易插入資料庫*/
5.KVC的keyPath中的集合運算子的使用
簡單集合操作符
@count: 返回一個值為集合中物件總數的 NSNumber物件。
@sum: 首先把集合中的每個物件都轉換為 double型別,然後計算其總,最後返回一個值為這個總和的 NSNumber物件。
@avg: 把集合中的每個物件都轉換為 double型別,返回一個值為平均值的 NSNumber物件。
@max: 使用 compare:方法來確定最大值。所以為了讓其正常工作,集合中所有的物件都必須支援和另一個物件的比較。
@min: 和 @max一樣,但是返回的是集合中的最小值。 物件操作符
物件操作符 想象下,我們有一個inventory陣列,代表了當地蘋果商店的當前庫存(iPad Mini不足,並且沒有新的iMac,因為還沒有發貨): Objective-C NSArray *inventory = @[iPhone5, iPhone5, iPhone5, iPadMini, macBookPro, macBookPro]; @unionOfObjects / @distinctUnionOfObjects: 返回一個由操作符右邊的key path所指定的物件屬性組成的陣列。其中 @distinctUnionOfObjects 會對陣列去重, 而且 @unionOfObjects 不會
6. enumerateObjectsUsingBlock
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"obj1",@"key1",@"obj2",@"key2", nil];
[dic enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
NSLog(@"value for key %@ is %@ ", key, value);
if ([@"key2" isEqualToString:key]) {
*stop = YES;
}
}];
7.enumerateObjectsWithOptions
- (void)testEnumerateObjectsWithOptionsForArrayFunc
{
NSArray *array = [[NSArray alloc]initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil];
//遍歷陣列元素
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
CHDebugLog(@"obj=%@ idx=%ld",obj,idx);
}];
//NSEnumerationReverse 倒序排列
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL * _Nonnull stop) {
CHDebugLog(@"idx=%ld, id=%@", idx, obj);
//當需要結束迴圈的時候,呼叫stop,賦予YES
if (idx ==3) {
*stop = YES;
}
}];
}