私はそれを正しく行うかどうかを知る必要があります。アプリケーションは正常に実行されていますが、私はライフサイクルを正しく取得しているかどうかはわかりません(リーク?)。ブロックとARCによるメモリ管理、リーク?
注:機器には漏れがありません。
方法のAAAのコード:いくつかのクラスAの:
- (void) aaa {
NSString *path = ...something...;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
だから私はaQueue(NSOperationQueue *)を置くためにブロックを作成します。目標は、メインスレッドから長時間実行しているsomethingElseWith:メソッドをオフロードして、GUIが引き続き応答するようにすることです。
ブロック内では、aaa:メソッドの最後に範囲外になるローカルのvar "path"を参照します。
私が正しくドキュメントを読むと、ブロックは「パス」の保持を行います。しかし、ARCは暗黙のうちにこのブロックの最後にリリースを挿入していますか?論理的でいいですか。
「パス」を__blockとして宣言し、ブロックの最後にnilに割り当てる必要がありますか? (マニュアル...)
私はこの文脈で__weakの使い方を理解しています。
ありがとうございました。質問:ARCが使用されなかった場合、 'path'変数もうまくいきますか?または、ブロックの最後に '[path release]'が必要ですか? – malaba
@malaba ARCの有無にかかわらず、path変数は、あなたのためにパスを保持し、ブロックが割り当て解除/スコープ外になったときに解放するので、ARCの有無に関係なくうまくいきます。 – Joe