2011-02-28 50 views
1

我有一個NSLog替代方法,它輸出調用它的類以及名爲PLogging的類中稱爲PLog的行號和方法(選擇器)。它與從here取得的DLog完全相同,但名稱更改除外。編寫DLog的優點是,在Release模式下編譯時,日誌調用會更改爲註釋,從而否定您將會受到的性能影響。我希望能夠使用它並將其保留在框架中,但能夠從我添加框架的項目中調用它。但在發佈模式下,仍然會將日誌調用編譯爲註釋。這可能嗎?框架類中有條件編譯的NSLog替代框架在框架之外使用

回答

2

我會建議一個白名單的方法:添加一個預處理器定義到您的調試配置,使DLog/Plog登錄到控制檯。在其他情況下,它轉向評論。

請看看this blog post這似乎指出你的問題。當然,假設你不想改變你實現你的功能的方式:宏。我引用了abit:「一個基本問題的例子是你想鏈接到一個同時具有Debug和Release版本的庫,因此在你的應用程序中你希望你的Debug版本鏈接到庫的Debug版本,並且您希望發佈版本鏈接庫的發佈版本。「

我寧願傾向於使用目標,麻煩看起來不舒服。

+0

權。我現在有這個,但它只能在框架內工作。所以一旦框架被編譯,有沒有辦法讓框架依賴於包含它的項目的預處理器定義? – FreeAsInBeer 2011-02-28 17:20:21

+0

我看到了問題。如果您將模塊構建爲框架,則它已經預編譯,因此您無法使用此方法來打開/關閉日誌記錄。在這種情況下宏不起作用。如果你依賴這個機制,你可以構建你的框架的兩個版本:打開和關閉調試,並根據定義鏈接到你的項目中需要的版本。 – 2011-03-01 09:37:41

+0

你能想到其他解決方案嗎?我認爲在釋放時必須記住將框架切換出來是件很麻煩的事情。更自動的東西,也許? – FreeAsInBeer 2011-03-03 16:36:41

0

App Store不允許使用第三方框架。我假設你有一個靜態庫或源文件,你通過交叉項目引用添加到你的應用程序?

如果您已經爲您的調試配置設置了調試標誌併爲您的發佈配置取消設置了您的庫項目,那麼您所要做的就是爲您的應用項目使用相同的配置名稱,使用相同的配置構建。

+0

我已經爲iPhone和Simulator建立了一個靜態庫,可以將它們內置到一個* .framework中。你的答案將會起作用,但這對我以前的工作無能爲力。我希望當我以發佈模式構建項目時,PLog語句將被編譯成註釋。現在我已經根據處理器定義切換了它。 – FreeAsInBeer 2011-03-08 13:33:15