私は子供を強く参照している親がいます。子供は親に対して弱い参照を持っています。Objective-cでは、子プロセスが実行されているときに、親プロセスが子プロセスを中止するとどうなりますか?
親は、1つのスレッド上で子のメソッドを呼び出します。子メソッドが実行を終了する前に、親プロセスが子プロセスをデアロックできる可能性があります。このメソッドを返すまで親を解放するのを避けるために、これを同期させる明白な方法はありません。
どうなりますか?
編集:私はARCを使用していないよ、これはiOSの3.1.2
EDIT上で実行されます:何[NSValue valueWithNonretainedObject]を使用してはどうですか?これによれば
:オブジェクトがガベージコレクトされたとき https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcAPI.html
参照がゼロに設定されています。しかし、iOSはガベージコレクションを持っていないので、ぶら下がりポインタがありますか?
EDIT:この便利なポストを見つけたので、私は私があまりにもこのトピックについての学習を他の人とそれを共有するだろうと思った:
http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html
これは本当に良いアドバイスのようです。私は経験が豊富ではないので、これについて他の人々の意見も聞きたいと思います。 – xcoder
親がdeallocすると、子は何に戻りますか?親が値を返す子のメソッドを呼び出していて、子の返り値の前に親のdeallocがある場合、戻り値はどこに行きますか?それはクラッシュしますか?私はこれを解決するには、メソッド内で親を保持して解放することも考えていますか? – xcoder
親からメソッドが(同期的に)呼び出された場合、親メソッドから子メソッドが呼び出されたため、戻り値は親に送られます(親メソッドから呼び出されたため、戻り値は待機しません)。このメソッドが非同期に呼び出された場合、メソッドが終了すると、子は '[parent callbackMethod];を呼び出すでしょうが、' parent'はnilに設定されています(解放時に 'parent.parent = nil;')何も起こりません。 @Moとして。可能であれば、取り消すか、子供たちが解錠する前にその実行を止めるまで待つほうがよい) –