国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS-測試用例測試數組"firstObject"以及"lastObject"性能

2019-11-09 16:26:43
字體:
來源:轉載
供稿:網友

在開發中數組可以說是最常用到的數據結構了,無論是存儲對象還是獲取沙盒目錄數組中文件路徑,會經常用到數組的兩個對象方法: 即 [xx數組 firstObject][xx數組 lastObject]. 譬如獲取沙盒中cache文件夾路徑

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]

因為 NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) 所取到的路徑數組只有一個,所以兩者皆可獲取沙盒中cache路徑. 每每使用我都會好奇兩個方法哪個性能高一點? 使用iOS測試用例實地測試一下便可.

首先自定義一個工具類 TestTool 聲明如下方法

+(NSNumber *)firstNum;+(NSNumber *)lastNum;-(NSNumber *)firstNumber;-(NSNumber *)lastNumber;

并實現

+(NSNumber *)firstNum{ return [testNumbers firstObject];}+(NSNumber *)lastNum{ return [testNumbers lastObject];}-(NSNumber *)firstNumber{ return [testNumbers firstObject];}-(NSNumber *)lastNumber{ return [testNumbers lastObject];}

宏定義初始化數組 testNumbers0

#define testNumbers @[@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123,@98,@7,@97987,@3456,@0,@87,@456,@66,@12,@90,@9,@678,@4567,@987654,@10010,@6545,@798,@123]

下面使用測試用例分別使用 [testNumbers firstObject][testNumbers lastObject] 提取數組中第一個或最后一個元素 123 .為使結果更明顯,同樣使用for循環提取900000遍,查看耗時.

測試1.測試多數據數組差異

/// 類方法測試 [xx數組 firstObject]-(void)testPerformanceArrFirst_ClassMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { NSNumber *lastNum = [TestTool firstNum]; } }]; // 多數據數組 - 五次結果分別: 3.517 3.403 3.475 3.516 3.571 平均:3.4964}

[xx數組 firstObject] : 一個存儲多組數據的數組取首元素五次測試值平均耗時 3.4964 秒

/// 類方法測試 lastObject-(void)testPerformanceArrLast_ClassMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { NSNumber *lastNum = [TestTool lastNum]; } }]; // 多數據數組 - 五次結果分別:3.342 3.282 3.357 3.318 3.359 平均:3.3316}

[xx數組 lastObject]: 一個存儲多組數據的數組取首元素五次測試值平均耗時 3.3316 秒

明顯在一個存儲有200個數據左右的數組,使用 [xx數組 lastObject] 性能要優于 [xx數組 firstObject]

測試2.測試單數據數組差異

數組更改為:

#define testNumbers @[@123]

將上述測試數組更換為只有一個數據的單數據數組, 這樣無論[testNumbers0 lastObject] 性還是 [xx數組 firstObject] 取得都是同一個數據,測試兩個類方法性能差異

/// 類方法測試 [xx數組 firstObject]-(void)testPerformanceArrFirst_ClassMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { NSNumber *lastNum = [TestTool firstNum]; } }]; // 單數據數組 - 五次結果分別: 0.198 0.200 0.201 0.201 0.208 平均:0.2016}

[xx數組 firstObject] : 一個存儲單一數據的數組取首元素五次測試值平均耗時 0.2016 秒

/// 類方法測試 lastObject-(void)testPerformanceArrLast_ClassMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { NSNumber *lastNum = [TestTool lastNum]; } }]; // 單數據數組 - 五次結果分別:0.197 0.195 0.206 0.194 0.197 平均:0.1978}

[xx數組 lastObject]: 一個存儲單一數據的數組取首元素五次測試值平均耗時 0.1978 秒

明顯在一個存儲有1個數據左右的數組,使用 [xx數組 lastObject] 性能同樣也要優于 [xx數組 firstObject]

測試3. 類方法性能和對象方法性能差異

眾所周知聲明一個類,在類中聲明方法可以聲明類方法和對象方法, 倘若方法中不會使用類中成員變量和屬性,一般建議將方法聲明為類方法,因為相同的算法類方法性能要優于對象方法.下面對上述結論進行測試,畢竟耳聽為虛.

下面在類方法和對象方法中同樣執行 對相同數組(1數據數組) 進行相同 [xx數組 lastObject] 算法 即對比如下兩方法

+(NSNumber *)lastNum{ return [testNumbers lastObject];}-(NSNumber *)lastNumber{ return [testNumbers lastObject];}

測試用例進行測試

/// 類方法測試 lastObject-(void)testPerformanceArrLast_ClassMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { NSNumber *lastNum = [TestTool lastNum]; } }]; // 單數據數組 - 五次結果分別:0.197 0.195 0.206 0.194 0.197 平均:0.1978}/// 對象方法測試 lastObject-(void)testPerformanceArrLast_ObjectMethod{ [self measureBlock:^{ for (int i = 0; i < 900000; i++) { TestTool *tool = [[TestTool alloc] init]; NSNumber *lastNum = [tool lastNumber]; } }]; // 單數據數組 - 五次結果分別: 0.333 0.333 0.349 0.350 0.331 平均:0.3392}

明顯類方法性能明顯優于對象方法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合江县| 莱阳市| 西宁市| 明溪县| 文化| 恩平市| 京山县| 乐平市| 综艺| 天峻县| 霸州市| 古交市| 永年县| 岑巩县| 宁武县| 临清市| 偏关县| 鱼台县| 丰顺县| 阳新县| 正宁县| 凌云县| 汕头市| 鄂尔多斯市| 定边县| 蓬安县| 禹城市| 行唐县| 定陶县| 山丹县| 乌拉特后旗| 辉南县| 鄄城县| 忻城县| 吐鲁番市| 苗栗市| 望都县| 永丰县| 平潭县| 开阳县| 灌南县|