あなたが達成しようとしていることを完全には理解していませんが、一般的には次のとおりです。
誰がいつオブジェクトを解放/割り当て解除するかについて心配する必要はありません。代わりに、あなた(あなたの単一のオブジェクトまたはメソッド) がそれを必要とし始めたときにそれを保持し、必要がなくなったときにそれを解放するようにしてください(または自動解放します。この場合、autorelease を呼び出したスレッドで解放されます)。 )。
これはまさにそのperformSelectorOnMainThread:withObject:waitUntilDone:
仕組みです。ドキュメントから:
このメソッドは、セレクターが実行されるまでレシーバーと arg パラメーターを保持します。
仕事をするためにそれらが必要な間、それらを保持します。
つまり、オブジェクトを作成して別のスレッドに送信するメソッドは次のようになります。
MyClass* myClass = [[MyClass alloc] init]; // retained, will need it for performSelector
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
[myClass release]; // no longer needing it.
また
MyClass* myClass = [[[MyClass alloc] init] autorelease]; // will be released automatically, but guaranteed to be retained until this method returns
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
あなたが今持っている方法はメモリリークです。
受け取り方法:
- オブジェクトを内部でのみ使用する場合は、
performSelector
「実行後まで」(メソッドが戻るまで) 保持する必要がないため、保持する必要はありません。
- 後で必要になった場合は、それを保持するプロパティに割り当てる必要があります。