1. ホーム
  2. memory-management

[解決済み] iOS5におけるstrong storageとweak storageの説明

2022-09-14 21:37:59

質問

iOS5の開発で、objective-cを使うのは初めてです。の違いを理解するのに苦労しています。 strong 弱い を保存しています。 ドキュメントや他のSOの質問も読みましたが、どれも同じように聞こえてしまい、それ以上の洞察はありません。

私が読んだのは のドキュメントを読みました。ARC への移行 - を読むと、iOS4 の用語である retain、assign、release に言及していて、混乱しました。それから、Open U CS193p を調べると、strong と weak を区別しています。

強い : "私がもうそれを指さないまで、これをヒープに保管してください"。

弱い : "誰かがそれを強く指摘する限り、これを維持する"。

ポインタがオブジェクトを指していない場合、そのオブジェクトを保持しているメモリを解放する、という2つの定義は同じではないですか?ポインター、ヒープ、メモリの割り当てまたは解放の概念は理解できますが、強いと弱いの違いは何でしょうか?

どのように解決するのですか?

がなくなると同時にオブジェクトが解放される点が異なります。 強い のポインタが無くなるとすぐに割り当て解除されることです。たとえ弱いポインタがそれを指していたとしても、最後の強いポインタがなくなれば、オブジェクトは解放され、残りの弱いポインタはすべてゼロになります。

おそらく例があるはずです。

私たちのオブジェクトが犬で、その犬が逃げ出したい(割り当て解除されたい)と思っているとします。

強力なポインタは、犬につけられた鎖のようなものです。犬にリードを付けている限り、犬は逃げません。もし、1匹の犬に5人がリードを付けたら(1つの物体に5つのストロングポインターを付けたら)、5つのリードがすべて切り離されるまで、犬は逃げません。

一方、弱いポインターは、小さな子供が犬を指差して「見て!犬だよ!」と言うようなものです。犬がまだ鎖につながれている限り、小さな子供たちはまだ犬を見ることができ、それを指さします。しかし、すべてのリードが外れた途端、いくら小さな子供たちが指をさしても、犬は逃げてしまうのです。

最後の強いポインタ(リーシュ)がオブジェクトを指さなくなるとすぐに、そのオブジェクトは解放され、すべての弱いポインタがゼロになります。