時間損耗 & 字符串查找

時間損耗

time(&temp)返回從CUT(Coordinated Universal Time)時間1970年1月1日00:00:00(稱為UNIX系統(tǒng)的Epoch時間)到當(dāng)前時刻的秒數(shù)

clock()返回從“開啟這個程序進程”到“程序中調(diào)用clock()函數(shù)”時之間的CPU時鐘計時單元(clock tick)數(shù); 比如姻僧,sleep(5)并不占用cpu資源蒲牧,導(dǎo)致即使sleep了5秒,最后通過clock()來計算時間損耗冰抢,仍然不會將這5秒算入損耗之中。

CFAbsoluteTimeGetCurrent() 返回的時鐘時間將與會網(wǎng)絡(luò)時間同步翠订,

mach_absolute_time()CACurrentMediaTime()是基于內(nèi)建時鐘的遵倦,能夠更精確更原子化地測量,并且不會因為外部時間變化而變化(例如時區(qū)變化梧躺、夏時制、秒突變等),但它和系統(tǒng)的uptime有關(guān),系統(tǒng)重啟后CACurrentMediaTime()會被重置棘脐。(比如電腦開機龙致,手機開機到調(diào)用函數(shù))

CFTimeInterval GetCFAbsoluteTimeWithBlock(dispatch_block_t block) {
    CFAbsoluteTime currentCFTime = CFAbsoluteTimeGetCurrent();
    block();
    CFAbsoluteTime lastCFTime = CFAbsoluteTimeGetCurrent();
    return lastCFTime - currentCFTime;
}

CFTimeInterval GetCACurrentMediaTimeWithBlock(dispatch_block_t block) {
    CFTimeInterval currentCATime = CACurrentMediaTime();
    block();
    CFTimeInterval lastCATime = CACurrentMediaTime();
    return lastCATime - currentCATime;
}

CFTimeInterval GetUint64WithBlock(dispatch_block_t block) {
    uint64_t currentTime = mach_absolute_time();
    block();
    uint64_t lastTime = mach_absolute_time();
    return (1e-9*(lastTime - currentTime));
}

CFTimeInterval GetClockWithBlock(dispatch_block_t block) {
    clock_t currentTime = clock();
    block();
    clock_t lastTime = clock();
    return (CFTimeInterval)(lastTime - currentTime)/CLOCKS_PER_SEC;
}

NSDate 目代、CFAbsoluteTimeGetCurrent嗤练、CACurrentMediaTime 的區(qū)別

iOS 性能優(yōu)化之業(yè)務(wù)性能監(jiān)控

字符串查找

__block NSString *testString = @"honzon now 25 years old, now live in beijing. honzon like watching moves, reading books and doing  many other things.";
__block NSString *like = @"honzon";


NSLog(@"NSScanner used time: %f", GetCFAbsoluteTimeWithBlock(^{
    NSScanner *scanner = [NSScanner scannerWithString:testString];
    scanner.scanLocation = 0;
  
    while (![scanner isAtEnd]) {
        if ([scanner scanUpToString:like intoString:NULL]) {
            NSLog(@"NSScanner success");
            break;
        }
    scanner.scanLocation++;
    }      
}));
        
NSLog(@"rangeOfString used time: %f", GetCFAbsoluteTimeWithBlock(^{
    if ([testString rangeOfString:like].length > 0) {
        NSLog(@"rangeOfString success");
    }
}));

NSLog(@"containsString used time: %f", GetCFAbsoluteTimeWithBlock(^{
    //在iOS8以后在讶,還可以用下面的方法來判斷是否包含某字符串:
    if ([testString containsString:like]) {
        NSLog(@"containsString success");
    }
}));

NSLog(@"NSPredicate used time: %f", GetCFAbsoluteTimeWithBlock(^{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",like];
    if([predicate evaluateWithObject:testString]) {
         NSLog(@"NSPredicate success");
    }
}));
    
NSLog(@"NSTextCheckingResult used time: %f", GetCFAbsoluteTimeWithBlock(^{
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:like options:NSRegularExpressionCaseInsensitive error:&error];
    NSTextCheckingResult *result = [regex firstMatchInString:testString options:0 range:NSMakeRange(0, [testString length])];
    if (result) {
        NSLog(@"NSTextCheckingResult success");
    }
}));

NSLog(@"hasPrefix used time: %f", GetCFAbsoluteTimeWithBlock(^{
    if ([testString hasPrefix:like]) {//hasSuffix
        NSLog(@"hasPrefix success");
    }
}));


//查找文字(honzon)位于最開始位置 containsString(0.000035) > hasPrefix(0.000042) > rangeOfString(0.000046) > NSPredicate(0.000385) > NSScanner(0.000808) > NSRegularExpression(0.003134)

//查找文字(like)位于最中間位置 containsString(0.000038) > rangeOfString(0.000061) > NSScanner(0.000887) >   NSPredicate(0.000363)  > NSRegularExpression(0.002953)

//查找文字(things.)位于最末端位置 containsString(0.000088)  > hasSuffix(0.000089) > rangeOfString(0.000113)  > NSPredicate(0.000416)  > NSScanner(0.000841) > NSRegularExpression(0.003864)

在iOS8之前构哺,可以盡量使用rangeOfString:方法來查找字符串,之后的話残拐,使用containsString會更加快速碟嘴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娜扇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枢析,老刑警劉巖刃麸,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辐益,居然都是意外死亡脱吱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門续捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宦搬,“玉大人牙瓢,你說我怎么就攤上這事间校。” “怎么了胁附?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長州袒。 經(jīng)常有香客問我弓候,道長,這世上最難降的妖魔是什么菇存? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮陈惰,結(jié)果婚禮上毕籽,老公的妹妹穿的比我還像新娘井辆。我一直安慰自己,他們只是感情好杯缺,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布萍肆。 她就那樣靜靜地躺著,像睡著了一般塘揣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亲铡,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天奖蔓,我揣著相機與錄音,去河邊找鬼吆鹤。 笑死,一個胖子當(dāng)著我的面吹牛轰异,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搭独,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唉俗!你這毒婦竟也來了配椭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤衡楞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘾境,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镰惦,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年兑凿,在試婚紗的時候發(fā)現(xiàn)自己被綠了茵瘾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡圣絮,死狀恐怖聘殖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奸腺,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布帮非,位于F島的核電站,受9級特大地震影響末盔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翠拣,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一游盲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧益缎,春花似錦、人聲如沸莺奔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽励饵。三九已至滑燃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間表窘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工瘤袖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昂验,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓占婉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逆济。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容