DEBUG模式和RELEASE模式

2021-07-03 18:46:39 字數 2606 閱讀 4668

簡單的**如下,?

1

2

3

4

#if defined(debug)||defined(_debug)

nslog(@"測試**");

nslog(@"test coding");

#endif

上面的#if #endif巨集定義的意思就是如果定義了debug,那麼就使用nslog輸出;否則這段**直接忽略。有人會疑問這個debug和_debug來自**,這個其實不用擔心,這個來自於xcode的預設設定,我們可以取消debug模式,開啟release發布模式,如下截圖所示,

選擇product->scheme->edit scheme,

下圖可以選擇debug和release兩種模式,

這裡我選擇了release,那麼則預設沒有定義debug,則上面**中#if...#endif之間的輸出nslog不會執行。這樣就在發布程式的時候,節省了一些硬體裝置的資源。

那麼,如何在 swift 專案裡正確地設定 logging 呢?以下我以 crashlytics 為例,當然,用其他工具甚至不用第三方工具也是可以的。

在過去 objective-c 專案裡,針對 development 環境和 release 環境使用不同的方法進行 logging 我們是通過 preprocessor macros 來進行的。比如 debug 是作為乙個預設的 macro 加進去的:看下圖,只要有 $(inherited) 這個在,debug 這個 macro 就會存在專案的 development 模式。

那麼在 swift 專案裡面我們如何去區分 debug 和 release 模式呢?自然也有類似的方式。

實際上,swift 語言也支援類似於 c 語言一樣的 macro,常用的那些基本能滿足我們的使用需求。使在 swift 專案裡也和 objective-c 一樣使用 debug 來區分 debug 和 release,我們只需要到 target 的 build settings 裡面,找到 swift compiler custom flags,在 debug 處傳入乙個 -d debug 即可。

這樣如果你的專案混合了 objective-c 和 swift,objective-c **依然會通過之前的 debug 來做正確的分支編譯,swift 編譯器也可以通過這個專門的 custom flags 來作分支編譯。

定義好了這個,我們就可以做正確的 logging 處理了。

主要說明:

於是我在 swift **裡重寫了 nslog 這個方法,使其根據不同的編譯環境使用不同的 crashlytics 方法,達到了我預期的效果。

這裡還有一點可以改進或討論的餘地,由於 swift 把 string 的使用變得很方便,我從環境變數構建乙個字串再也不用像 objective-c 那樣:

nslog

(@"hello, this is %@, i'm %d"

,name

,age

")

而是直接使用靈巧的 swift 方式:

nslog

("hello, this is

\(name

), i'm

\(age)"

)

因而我用不著 args 部分,只通過 getvalist() 傳乙個空的引數列表進去即可。在實際的使用過程中,這個新包裝的 nslog 也永遠也不需要去用到引數列表部分,直接用 swift 的方式即可。

根據上圖,由於我當前是 debug 環境,xcode 直接高亮了 #if debug 那一塊,方便我識別。這樣,開發環境中我就可以在終端裡看到 log 輸出,而在正式發布的時候它們就不會輸出來。我可以像以前一樣在專案的其他地方繼續用 nslog,所更改的地方也就是這麼乙個設定+短短的幾行就完成了。

除了因為混合 objective-c 和 swift 環境的情況下,我們需要分別設定和確認 macro/flag 有沒有被設定這點瑣碎外,其他我用的還是蠻愉快的。

最後希望正式版早日審核通過 :)

DEBUG和RELEASE 的區別

debug和release 版本差異及除錯相關問題 記憶體分配問題 1.變數未初始化。下面的程式在debug中執行的很好。thing search thing something bool found for int i 0 i whatever.getsize i found it if foun...

debug和release版本對比

debug和release,在我看來主要是針對其面向的目標不同的而進行區分的 debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,以為開發人員提供強大的應用程式除錯能力。release通常稱為發布版本,是為使用者使用的,一般客戶不允許在發布版本上進行除...

Debug和Release之區別

debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程 序。release 稱為發布版本,它往往是進行了各種優化,使得程式在 大小和執行速度 上都是最優的,以便使用者很好地使用。debug 模式下會將很多除錯資訊新增到程式中,而release模式下不會有,速度有一定變化...