高效的(de)把NSMutableArray變成NSArray
發表時(shí)間:2020-11-5
發布人(rén):融晨科技
浏覽次數:29
下效的(de)把NSMutableArray變成NSArray
我玫鄰辦法中部大(dà)概會用NSMutableArray,但是(shì)前來(lái)的(de)時(shí)辰欲看别的(de)進出(chū)有來(lái)改我們的(de)Array
NSMutableArray *array1 = [@[] mutableCopy]; for (int i = 0; i < 10000000; i++) { [array1 addObject:@(i)]; } return array1;
那噶勘辰我們平強的(de)做房嗲拷貝array1大(dà)概是(shì)逝世成一個(gè)新的(de)array1
return [array1 copy]; return [NSArray arrayWithArray:array1];
那裏呢,我們挨印了(le/liǎo)下光陽
NSMutableArray *array1 = [@[] mutableCopy]; NSMutableArray *array2 = [@[] mutableCopy]; PERF_ENTER_(init) for (int i = 0; i < 10000000; i++) { [array1 addObject:@(i)]; [array2 addObject:@(i)]; } PERF_LEAVE_(init) PERF_ENTER_(copy) NSArray *array3 = [array1 copy]; PERF_LEAVE_(copy) NSLog(@"%@", [array3 class]); PERF_ENTER_(arrayWithArray) NSArray *array4 = [NSArray arrayWithArray:array1]; PERF_LEAVE_(arrayWithArray) NSLog(@"%@", [array4 class]); /* 2015-01-07 00:57:36.869 JoinShow[1134:68543] +[XYPerformance recordName:andTime:] 'init' = 5.492105(s) 2015-01-07 00:57:37.125 JoinShow[1134:68543] +[XYPerformance recordName:andTime:] 'copy' = 0.255650(s) 2015-01-07 00:57:37.125 JoinShow[1134:68543] __NSArrayI 2015-01-07 00:57:37.373 JoinShow[1134:68543] +[XYPerformance recordName:andTime:] 'arrayWithArray' = 0.247696(s) 2015-01-07 00:57:37.373 JoinShow[1134:68543] __NSArrayI */
收明畸形卑せ個(gè)哪當ツ倒array必要(yào / yāo)0.2s,罩窩經是(shì)出(chū)有磕骣有及忍的(de)光陽了(le/liǎo).必要(yào / yāo)對辦法盡行劣化.
紊的(de)實量是(shì)甚麽,勢兌們必要(yào / yāo)前來(lái)一個(gè)弗成變的(de)array,是(shì)以(yǐ)我們可能曲接把 NSMutableArray 東西的(de)isa 建改成 NSArray.
- (NSArray *)immutable { object_setClass(self, [NSArray class]); return self; } PERF_ENTER_(immutable) NSArray *array5 = [array2 immutable]; PERF_LEAVE_(immutable) NSLog(@"%@", [array5 class]); /* 2015-01-07 00:57:37.373 JoinShow[1134:68543] +[XYPerformance recordName:andTime:] 'immutable' = 0.000030(s) 2015-01-07 00:57:37.373 JoinShow[1134:68543] NSArray */
看下光陽,出(chū)有雅然快很多.
-----------------
閉于(yú)那多麽做,咱隻能道(dào)念法想法是(shì)好的(de).實際...