try! Swiftメモ: Day1-3 SwiftのPointy Bits
1日目第3セッションは、Pointerについてでした。
普通に開発する分には触れる機会は少ないですが、APIを利用する時にたまに使ったりしますね。
今回はそこまで深く突っ込んだ話ではありませんでしたが、概要や注意点などもきちんと説明されていて良かったです。
セッション内でもあったように、Pointerを上手く扱ってパフォーマンス面の最適化に利用していきたいなーと思いました。
概要
Swiftにおける「Safe」とは
- Optionalとかあるけど..
- 使い方によってはクラッシュするよ
- !とかでunwrapするとクラッシュ
- Safeとは、型があることによって、予期せぬ動きを守ってくれる意味
- 使い方によってはクラッシュするよ
- Swiftの外に出ると、Unsafe~~
- memory is biteが最小単位
- withUnSafePointer(&a) { pointer in print(pointer) } で
UnsafePointerType
- UnsafePointer - メモリアドレスのラッパー
イミュータブル | ミュータブル | |
---|---|---|
型 | UnsafePointer | UnsafeMutablePointer |
Raw | UnsafeRawPointer | UnsafeMutableRawPointer |
Typed - 型タイプ
- UnsafePointer
- UnsafeMutablePointer
- 安全に異なるタイプのメモリにアクセスできる
Raw - Rawタイプ
- UnsafeRawPointer
- UnsafeMutableRawPointer
ロケーションへアクセスできる
Byteレベルで取り扱う
- インスタンスレベルではないよ
- 最適化とか行う時に役立つ
Pointerを使う
- 安全性とスピードのトレードオフになる
- メモリ割り当て
- 割り当てた後は必ず外すこと
- defer { わりあて外し } を使うと良い
誤った使い方 - やってはいけないこと
- クロージャの中でpointerをエスケープしない !!