2017-08-11 52 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。