2017-08-11 98 views
-1

標題:由super.init調用的描述()最佳實踐:description vs debugDescription

這是對舊問題的一個新嘗試。作爲一個主要的Swift程序員,我傾向於不使用NSObject來進行類定義,因爲Objective-C的殘留副作用。就像如果我有一個名爲長度爲的只讀屬性,然後我想要創建一個名爲setLength的setter函數,我會收到與Objective-C中類似定義相沖突的警告。我剛剛發現了set(var){} setter。如果我繼承了從NSObject繼承的UIDocument等Cacoa類,我必須忍受這些副作用。

我有一個類在屬性定義中使用了兩個其他類,它們都不是NSObject。這個類有一個描述計算變量使用描述計算變量的其他兩個類在其組成。所有這三個類都需要符合CustomStringConvertable協議。好吧,一切都很好。

在某些時候,這個類被升級爲UIDocument,而CustomStringConvertable變得多餘並被刪除。一切仍然有效。

這是我今天發現的。我想在程序中的某一點打破它打印兩個屬性之一的位置,並且爲了方便起見,我在該類的描述變量中設置了斷點,並認爲只應在我感興趣的點,在那裏打印出來。我發現,在UIDocument子類的所有super.init()期間,description變量被調用!其中有幾個。我認爲將字符串組合成相對昂貴,但並不在意,因爲它們只用於調試,但是在調用它們以及誰知道如何在super.init()中使用它們時,我需要更改它。

我在同一個程序中檢查了另一個UIDocument類,該程序有200個與它關聯的文件,它也調用了super.init()中的描述。

沒有人有使用描述 VS debugDescription的最佳做法的任何輸入?

我要回答我自己的問題作爲文件的問題。

回答

0

我切換了UIDocuments子類來定義和使用debugDescription。我正在調試一些加載所有文件的代碼,並進行一些操作,我可以將加載時間從9.8秒減少到6.8秒。

我還通過所有的地方去當斯威夫特3換算,添加字符串(描述:)的程序,發現我很多他們改變使用debugDescription和消除字符串(描述:)包裝。

我認爲最好的做法是隻定義和使用debugDescription和我的非NSObjects更改一致性從CustomStringConvertable CustomDebugStringConvertable。