HOME > メモリの動きとポインタ
メモリの動きとポインタ
Swiftとポインターはあまり縁がないのかなと思っていたのですが、開発を進めていると 時々このUnsafePointerの名前を見ることがあります。本日はこのPointerが何を表しているかを調査してみます。
参考:SwiftでUnsafePointer
参考:Swift - UnsafePointerと上手に付き合う
参考:SwiftコードとC関数との間でのデータ変換について
参考:Swiftでポインタが指している値にアクセス
やってみた
資料をみているとUnsafePointerやCOpaquePointerはC言語等との連携時に必要(?)なようです。メモリ管理が必須なC言語なので、 Swiftで利用した場合Swift側でC言語と同じようにメモリを扱わないといけない、そういう流れなのかと理解しています。
さて、Pointerですが、 クラスのポインタを別クラスで保存して、その又別クラスで読み込むような場合はどうしたらよいかと調べていたのですがCMutableVoidPointerえるのかな?少し調査してみます。
let test = "swift-salaryman";
var p = &test;
こんな感じに&をつければよいのかな、と思ったけどエラー。
よくわからなくなってきました、普通に変数にいれると元のクラスのメモリをそのまま渡すのでしょうか。基本のところですよね、、、
import UIKit
class ViewController: UIViewController {
var test1:UIViewController = UIViewController();
var test2:UIViewController = UIViewController();
var test3:UIViewController = UIViewController();
override func viewDidLoad() {
super.viewDidLoad()
test1 = self;
test2 = self;
test3 = self;
println(test1);
println(test2);
println(test3);
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
こんな感じにtest1,2,3の変数にselfを直接いれてそれぞれのメモリ参照のアドレスを比較してみました。
メモリの場所は違うのかなぁ〜とか思っていましたが、一緒なんですね。特にポインタを意識しなくても参照を渡している、無意識に利用していましたがあらためて確認すると納得できました。
まとめ
タイトルのUnsafePointerを調べる予定が方向が変わってしまいましたが、改めてメモリの動きを少し感じました。 C言語開発のプログラマーの方からは批判されるかと思うのですが、VBからプログラムを始めた私はずっとメモリからは目を 背けていましたので、SwiftはそんなVB開発者でも簡単に利用できてしまうとっかかり易い言語であると同時に、 C言語との連携もあるので、一歩進んだSwift開発者になるにはメモリやポインタも改めて勉強しないといけないなぁ、 と思った記事になりました。未熟な内容失礼しました。。。
↓こんな記事もありますよ!
![]() 2021-04-22 14:54:53 | かっこいいカルーセル厳選3点!WebGLを使った渋い画像スライダー。
昨日カッコいいスライダーを探す旅にでていました。
よく使われるswiper など、シンプルで使いやすくデザインも良いのですが、何かもの足りない、、、。
そこで調べていくと、webglを使... |
![]() 2021-04-20 14:46:43 | Twillioとは何??skywayとは何が違うのか。webrtcを使う際に判断する情報。
先日webrtc開発で「twillio」といった名前を聞きました。
以前自分でskywayを使ってwebrtcを試していた際に調べた時には、無かったような気もするんだけと、KDDIが絡んでいる... |
![]() 2021-04-19 13:58:21 | 先日久々にアップデートした妊娠週刊パパのAndroid版も。アカウント移管したいんだけど、注文ID見当たらないよ。
先日の妊娠、出産、育児関連のアプリ「妊娠週刊パパ」をAndroid studioで再リリースしようと思ってるんだけど、コンパイル失敗してエミュレータで動かせない。
多分sdkとかapiのバージ... |
Tweet
![]() |
|||
|