Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > StrongとWeak参照

StrongとWeak参照

Objective-Cの時は自動でメモリがリリースされないようにstrongをつけたりと変数の宣言時に追加することができましたが、 swiftは基本的にデフォルトでは強参照がかかっている状態です。つまりstrongとの記述はなくなっています


参考:Strong and weak references in Swift
参考:Swiftの循環参照問題におけるunownedとweakの使い分けについて

StrongとWeakの例文

Strongは記載必要がないです。weakを追加することは可能です。Strongは変数が勝手に消えないようにとの印ですので、 明記的にnilをオブジェクトに入れるまでは基本消えません。weakはメモリの使用量に応じて勝手にnilがセットされて初期化されちゃったりします


var swift-salaryman = UIView(); //これでstrongと同じ
weak var manga-salaryman = UIView(); //これでweakと同じ

Unownedの例文

さて、ただこのstrongとwaekだけではなく、unowendという記載方法もあります。Qiita様の記事で説明している箇所がるのですが、 なんともシックリ理解できなかった。難しい、、、自分で少し検証してみます

strongandweek説明

どうやらweakを付けて宣言した変数は、宣言時にnilが含まれているようです。

swiftは基本的に「nilを利用しない」スタンスかと思いますので、nilを利用する為に使用しているOptional型と 関連があるのではと思います。

以下、まずOptional型のサンプルを見ながら記載していきます。
(※Optional型の説明はこちら:「?マークと!マーク」)

strongandweek説明

二行目のnilをいれる箇所でエラーが発生しています。理由はオプショナル型ではないためです。変数test2は?でオプショナルに 変わっているため、エラーが発生していません

strongandweek説明

変数の宣言にweakをつけると、宣言時点ですでにエラーが発生するようになりました。一番上の表示のように既にnilが入っている状態 ですので、swiftから怒られているのかと思われます。

strongandweek説明

unowenedを付けると、一行目のエラーがなくなりました。nilでは無いからです。二行目のエラーはOptional型ではないので通常のエラー。 test2の変数宣言時にエラーがでているのは、unownedは「nil」使わない=Optional「nil」使う、のためにバッティングしてしまって エラーが発生しているようです。

まとめ

nilを使わないで開発する時は「weak」ではなく「unowned」を使う!でしょうか。ここまで来てやっとQiita様の記事の 意味がわかりました。。。。なので、開発者に依存する状態です。nilを使いたくないと徹底しているならweakを減らして作業する等の つかいわけが必要になってくるのかと思います。

↓こんな記事もありますよ!

SQLiteを使いたい。ラッパーを検証してみる。

SQLiteを使いたい。Objective-Cの時はMagical RecordでCoreDataを利用して問題なく使えたのですが、 今回はSQLite+Swiftでトライしてみたいと思います。ざっと調査すると、SwiftでSQLiteを使うのは、FMDB, SwiftData, SQLite.swiftが あるみたいです。この三つのラッパーから好みのものを選んでみるのが目標です。

SwiftData+SqliteのDBファイル保存+Libraryフォルダから読込

さて、私の目標は事前に作成したSqliteのDBファイルをSwiftDataで読み込むことですので、その一連の作業を以下説明してまいります。

URLエンコードとデコード

サーバとデータのやりとりをしているとURLエンコードしないと文字化けしちゃったりと問題がでる場合があります。 phpのurlencodeやurldecodeと連携させる場合等、Swift側でどうやってエンコードすれば良いかの方法を記載しております
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!