2

他の人のコードを見ていますが、オブジェクトVIDEOをリリースしているように見えますが、引き続き使用しています。

オブジェクト指向プログラミング言語についての私の理解から、リリースされたら、メモリから割り当てを解除する必要があります...

参照がどのようにあるかわかりません...しかし、それが問題ない理由だと思います。奇妙なことのように思えます(まだ終わっていないときにリリースしてください。たとえば、自動リリースを使用してみませんか)。

self.video = [[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]];
[video release];

// set output image size
video.outputWidth = 426;
video.outputHeight = 320;
4

2 に答える 2

5

それは以下と同等です: self.video = [[[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]] autorelease];

(ビデオが自分で保持されていると仮定)

可能な場合は自動解放プールを回避することで、パフォーマンスがわずかに向上します。また、ref カウントに関するコードのエラーをローカライズするのにも役立ちます。そう...プロパティがretainまたはcopyであると仮定すると、selfは正確に1つの参照を保持する必要があります-これは完璧です.

それが役立つことを願っています。

于 2010-10-22T07:14:28.450 に答える
4
self.video = [[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]];

この行は、実際には-setVideo:、ビデオ変数が保持される可能性が高いメソッドを呼び出します(対応するプロパティがretain属性で宣言されている場合)。したがって、ビデオオブジェクトの保持カウントは2になり、余分な保持を補うためにリリースします。オブジェクトは、保持カウントが0になったときにのみ割り当て解除されるため、安全に実行できます。

また、メモリリークを回避するために必要のないときにビデオオブジェクトが破棄されるように、コードのどこかでビデオをリリースする必要があります(deallocメソッドなど)。

于 2010-10-22T07:13:38.823 に答える