Objective-C 計算代碼已耗用時間

來源:互聯網
上載者:User

標籤:http   io   ar   os   sp   for   strong   檔案   on   

轉自:http://www.isaced.com/post-213.html

 

Objective-C 計算代碼已耗用時間

JUN 25

今天看到一篇關於iOS應用效能最佳化的文章,其中提到計算代碼的已耗用時間,覺得非常有用,值得收藏。不過在模擬器和真機上是有差異的,以此方法觀察程式運行狀態,提高效率。

第一種:(最簡單的NSDate

 

NSDate* tmpStartData = [NSDate date];//You code here...double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];NSLog(@"cost time = %f", deltaTime);


第二種:(將運行代碼放入下面的Block中,返回時間)

#import <mach/mach_time.h>  // for mach_absolute_time() and friends    CGFloat BNRTimeBlock (void (^block)(void)) {      mach_timebase_info_data_t info;      if (mach_timebase_info(&info) != KERN_SUCCESS) return -1.0;        uint64_t start = mach_absolute_time ();      block ();      uint64_t end = mach_absolute_time ();      uint64_t elapsed = end - start;        uint64_t nanos = elapsed * info.numer / info.denom;      return (CGFloat)nanos / NSEC_PER_SEC;  }


第三種:

/** * 計算指令碼時間 * @param $last最後一次的運行clock * @param $key標識 * @return 當前clock */double t(double last, char* key){    clock_t now = clock();    printf("time:%fs \t key:%s \n", (last != 0) ? (double)(now - last) / CLOCKS_PER_SEC : 0, key);    return now;}double t1 = t(0, "");//do somethingt(t1, "end");

 

 


 

飄飄白雲文中說到,對於UIImage載入映像的方法,下面第一種更為高效,因為iOS會內建 cache 載入映像。


+ (UIImage *)imageNamed:(NSString *)name;- (id)initWithContentsOfFile:(NSString *)path;


但是,imageNamed方法只能載入bundle中的檔案,如網狀圖像解析就無能為力了。

正好這裡總結到計算代碼已耗用時間,就以此為例看看兩種方法到底誰更高效,這裡我用最簡單的NSDate計算耗時:


    for (int i=0 ; i<10000; i++) {        UIImage *image = [UIImage imageNamed:@"icon.png"];//        UIImage *image = [[UIImage alloc] initWithContentsOfFile:@"icon.png"];        image = nil;    }    double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];    NSLog(@"cost time = %f", deltaTime);


輸出結果:

cost time = 0.022821 //imageNamedcost time = 0.102620 //initWithContentsOfFile


這裡圖片我用的一張1024x1024像素的png,可見兩種載入映像的方法耗時差別還是挺大的。

Objective-C 計算代碼已耗用時間

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.