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-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|