目标C [对象发行]

问题描述:

我在看别人的代码,但它似乎要释放对象的视频,但再继续使用它。目标C [对象发行]

从我的面向对象编程语言的理解

现在,一旦它的发布,应该从内存dealloc'd ...

我看不出它如何有任何引用...但我假设这就是它的原因。似乎是一个奇怪的事情,(版本它,当你还没有完成它,为什么不使用自动释放为例)。

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

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

为什么不释放你的视频对象之前得到的宽度和高度? – beefon 2010-10-22 07:16:53

+0

不是我的代码,但现在看来,因为保留计数为2它会释放时,该位置没有什么区别。 – 2010-10-22 07:20:20

这相当于确保视频对象被销毁: self.video = [[[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]] autorelease];

(假设该视频是由自我保持)

有避免自动释放池在可能的情况,以及它有助于定位在你的代码关于裁判的计数误差小的性能提升。所以...假设财产是保留或复制,那么自我应该持有一个参考 - 这是完美的。

希望有帮助。

+0

感谢啊,那台故事直。 – 2010-10-22 07:24:26

+0

或者只是删除自己,例如视频= ... – beefon 2010-11-11 07:15:55

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

这一行实际调用-setVideo:方法,其中,视频变量可能被保留(如果相应的属性与保留属性声明)。因此保留视频对象的数量变为2,并且补偿我们释放它的额外保留。只有当保留计数变为0时,对象才会被处理,所以这样做是安全的。

我们还需要在代码中的某处释放的视频(例如,在dealloc方法)是在不需要它,以避免内存泄露