私は一日中保持サイクルについて詳しく読んでいて、混乱し始めています。だから、いくつかのことを確認したかっただけです。(明確にするために、私はARCを使用しています)
だから私が持っているとしましょうMyFirstClass。MyFirstClassには (デフォルトで) を強く指すインスタンス変数がありますMyChildClass:
MyChildClass *_child;
MyFirstClass次のような getter (.h で公開されています) もあります。
-(MyChildClass *)child
{
return _child;
}
ここで、完全に別のクラスがあるとしましょうMySecondClass。次のようにMySecondClass指す弱いインスタンス変数があります。MyFirstClass
__weak MyFirstClass *_firstClass;
両方を保持する親クラスがありMyFirstClass、弱い参照を持っているだけなMySecondClassので、必要なときに親クラスがそれを解放するのを止めません。MySecondClassMyFirstClass
MySecondClass独自の子クラスもあり、インスタンス変数でも強く参照されます。
MySecondChildClass *_secondClassChild;
MySecondChildClassMyFirstClassのMyChildClassオブジェクトを参照したい。
したがって、ここでも弱いポインターを使用していると思いますMySecondChildClass。
__weak MyChildClass *_firstClassChild;
これを設定するためのカスタム init があります。
-(id)initWithFirstClassChild:(MyChildClass *)firstClassChild
{
if(self = [super init]){
_firstClassChild = firstClassChild;
}
}
最後に、MySecondClassを作成するメソッドがありますMySecondChildClass。
-(void)setupChild
{
_secondClassChild = [[MySecondChildClass alloc] initWithFirstClassChild:_firstClass.child];
}
これはすべて正しいですか?90% 大丈夫だと確信していますが、混乱しています。
を使用しているときはどうですか_firstClass.child、それへの強力なポインターが作成されますか? __weakそのメソッド呼び出しのどこかを参照する必要がありますか? MySecondChildClassの初期化中はどうですか?インスタンス変数を設定する前に一時的なポインターがMyChildClassありますが、心配する必要がある強力なポインターを作成しますか?
どんな明確化も素晴らしいでしょう。