2
考慮this extension上NSData
其中一個序列化對象NSData
成十六進制字符串:我是否需要釋放UnsafeBufferPointer或緩衝區指針的起始內存位置處使用的UnsafePointer?
extension NSData { func base16EncodedString(uppercase uppercase: Bool = false) -> String { let buffer = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count: self.length) let hexFormat = uppercase ? "X" : "x" let formatString = "%02\(hexFormat)" let bytesAsHexStrings = buffer.map { String(format: formatString, $0) } return bytesAsHexStrings.joinWithSeparator("") } }
如果UnsafeBufferPointer
是一個非擁有指針,這是否意味着我不需要(或我不能夠)明確調用銷燬?如果我從NSData
對象的字節內存中創建UnsafePointer
,我是否需要確保在複製緩衝區後銷燬該指針?
比較http://stackoverflow.com/q/25605658/1187415:*「只有在指針引用的內存中存在非重要內容時才需要destroy(),如強引用或Swift結構或枚舉「。* - 從這個意義上講,'UInt8'是」微不足道的內容「,如果你打電話銷燬,這是無關緊要的。 –
@MartinR謝謝。所以'UnsafePointer(self.bytes)'不會泄漏,因爲只要它超出範圍,它就會被釋放? – JAL
'UnsafePointer(self.bytes)'只是從'UnsafePointer'到'UnsafePointer '的指針轉換(「cast」)。它不分配內存。內存由'NSData'對象管理。 –