日記
今日は金曜日なのでお酒を飲みながら書いてる.
今日書いたコード
func printPointer(of some: Any) { withUnsafePointer(to: some, { print($0) }) } var str: String? = "Hello, World!!" var substr: Substring? = str![..<str!.firstIndex(of: ",")!] print("---") print("str: \(str)") printPointer(of: str) print(MemoryLayout.size(ofValue: str)) print("substr: \(substr)") printPointer(of: substr) print(MemoryLayout.size(ofValue: substr)) str = nil print("---") print("str: \(str)") printPointer(of: str) print(MemoryLayout.size(ofValue: str)) print("substr: \(substr)") printPointer(of: substr) print(MemoryLayout.size(ofValue: substr)) substr = nil print("---") print("str: \(str)") printPointer(of: str) print(MemoryLayout.size(ofValue: str)) print("substr: \(substr)") printPointer(of: substr) print(MemoryLayout.size(ofValue: substr))
--- str: Optional("Hello, World!!") 0x000000016b7932e0 16 substr: Optional("Hello") 0x000000016b7932e0 32 --- str: nil 0x000000016b7932e0 16 substr: Optional("Hello") 0x000000016b7932e0 32 --- str: nil 0x000000016b793248 16 substr: nil 0x000000016b793248 32
初めて知ったこと
Substring
というやつ.これはもとのString
と同じメモリ領域を指しているという話だったのでもとのString
を開放するとクラッシュするのではと思ったがしなかった.参照カウントが残っている?と思ったがStringは値型だった気がする.
お酒が入っているので追加調査は許して欲しい.