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を減らして作業する等の つかいわけが必要になってくるのかと思います。

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

CoreTextでTextViewの一文字の向きを変える(#2)

さて、サンプルそのままだと面白くないので、本日6月から開始する自転車規制強化 にのっかったサンプル<自転車の転だけ横に曲げる>にしてみます。(14歳以上が対象。自転車のイヤホン装着や片手走行、 酔っ払い運転、歩道運転、片手スマホ、、、、今まで誰もがやり通してきたことが「逮捕や補導の対象」となるようです。赤切符もきられる ようになるとのことで、自転車に酔っ払ってのって自動車の免停なんかになりかね無いので注意です)

CoreTextをイラストで理解してみる

上記がAppleのCoreText説明に記載されているイラスト図ですが正直よくわかりません。文章を三角や丸等の領域に表示したり、一行だけ表示したり、一文字だけ表示したり、 と様々な使い方ができるようです。

Facebook SDKを試してみる#3(再調査)

SDKのインストーラが起動しても結局frameworkをドラッグドロップしなちゃ追加できない、面倒臭い、と発言してしまったのですが、 どうやらSDKをインストーラにてインストールした場合(SDK4.1)は、importするだけでどうやらSDKが追加できるとかなんとか。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!