Swiftで文字列補間を使用しているときにメモリリークを検出しています。「Leaks」インスツルメントを使用すると、リークされたオブジェクトが「Malloc 32バイト」として表示されますが、責任のあるライブラリまたはフレームは表示されません。これは、文字列補間でオプションを使用することが原因のようです。
class MySwiftObject
{
let boundHost:String?
let port:UInt16
init(boundHost: String?, port: UInt16)
{
if boundHost {
self.boundHost = boundHost!
}
self.port = port
// leaks
println("Server created with host: \(self.boundHost) and port: \(self.port).")
}
}
ただし、文字列補間を、ピースを追加して文字列を作成するだけに置き換えると、メモリリークは発生しません。
// does not leak
var message = "Server created with host: "
if self.boundHost
{
message += self.boundHost!
}
else
{
message += "*"
}
message += " and port: \(self.port)"
println(message)
上記で間違っていることはありますか、それともSwiftのバグですか?
私自身の質問に答える...
オプションを直接使用するのではなく、文字列補間を使用する場合は、条件付きバインディングが正しい方法のようです。コンパイラがそれを許可する理由がわかりません。
注:誰かがより良い答えまたはより良い説明を持っている場合は、新しい答えを追加してください。
init(boundHost: String?, port: UInt16)
{
if boundHost {
self.boundHost = boundHost!
}
self.port = port
if let constBoundHost = self.boundHost
{
println("Server created with host: \(constBoundHost) and port: \(self.port).")
}
else
{
println("Server created with host: * and port: \(self.port).")
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加