NSLog 程式中的雙刃劍

2021-05-28 02:48:10 字數 899 閱讀 7984

相信所有的iphone開發者都曾經或者將會用到nslog這個函式。nslog的強大之處在於,它能在**執行過程中顯示變數值以及程式實際走向,能幫助我們發現大量錯誤和潛在風險。我們希望盡可能多的用到nslog,希望它能無處不在,使得錯誤無法存在——簡單的說nslog是乙個天使。

比如下面這段**就利用nslog,在程式執行時判斷裝置種類並顯示出來 nsstring *devicetype = [uidevice currentdevice

].model;

nslog

(@」device type: %@.」, devicetype);

使用nslog的乙個風險是:它的執行會占用時間和裝置資源。當我們用simulator時,nslog的資源占用並不引人注意,風險也不會顯示出來。但是如果你寫的是乙個即時戰略遊戲,而你在每乙個action中都加入了nslog——那麼nslog將成為乙個魔鬼。災難的具體表現常常是:你在simulator中執行遊戲暢通無阻,但到了真機上,會發現很「卡」,不論是拖動乙個單位還是縮放乙個場景,fps也降到了各位數。

簡單而粗暴的解決方案是:在乙個遊戲release前,將所有的nslog注釋掉。簡單有效,但***是:下次你要除錯時,又得將nslog乙個個取消注釋。

我找到了乙個最為有效的解決方案:你以release模式編譯的程式不會用nslog輸出,而你以debug模式編譯的程式將執行nslog的全部功能。 #ifndef __optimize__

# define nslog(…) nslog(__va_args__)

#else

# define nslog(…) {}

#endif

****

這個**的魔術在於:release模式通常會定義 __optimize__,當然debug模式不會。將這段**放在你的標頭檔案當中,你就可以放心的使用nslog了!

愛情是把雙刃劍

別讓深愛變成一種錐心之痛 記不得是從 看到也記不清是哪位哲人曾經說過這句話 如果你不真心的愛乙個人,請你放手,給自己乙個解脫,同時也好讓別人有機會愛她。如果你愛的人放棄了你,請你記住放開自己,好讓自己能夠有機會去愛別人。這話雖然很簡單很直白但是很有道理,也以另外一種方式教會了人們如何對待情感。如果失...

SDN是把雙刃劍嗎?

網路當中接入的裝置和雲計算的興起,對傳統網路的效能提出了更高的要求,這也是為什麼在經過深思熟慮之後,傳統網路正在積極向虛擬化網路功能和控制器過渡,電信公司正在部署sdn和nfv技術,以實現更快的速度和網路彈性提高網路效能。事實上,sdn有可能通過提供靈活性來適應當今應用程式和工作負載的動態性來徹底改...

新浪股權分散是把雙刃劍

禍起股權分散?分散的股權,使得董事會是個妥協和博弈的場合,常常處於難以平衡的權力紛爭之中,直接表現就是人事的頻繁變動。誰造就了問題經理人?如果股權分散,是否注定公司價值會受到損害?類似姜豐年 張蒞政這樣的行為有沒有損害原公司的利益,二人的行為有沒有違背職業道德?董事會的作用與效率 一書作者 波士頓諮...