目标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;
这相当于确保视频对象被销毁: self.video = [[[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]] autorelease];
(假设该视频是由自我保持)
有避免自动释放池在可能的情况,以及它有助于定位在你的代码关于裁判的计数误差小的性能提升。所以...假设财产是保留或复制,那么自我应该持有一个参考 - 这是完美的。
希望有帮助。
感谢啊,那台故事直。 – 2010-10-22 07:24:26
或者只是删除自己,例如视频= ... – beefon 2010-11-11 07:15:55
self.video = [[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]];
这一行实际调用-setVideo:
方法,其中,视频变量可能被保留(如果相应的属性与保留属性声明)。因此保留视频对象的数量变为2,并且补偿我们释放它的额外保留。只有当保留计数变为0时,对象才会被处理,所以这样做是安全的。
我们还需要在代码中的某处释放的视频(例如,在dealloc方法)是在不需要它,以避免内存泄露
为什么不释放你的视频对象之前得到的宽度和高度? – beefon 2010-10-22 07:16:53
不是我的代码,但现在看来,因为保留计数为2它会释放时,该位置没有什么区别。 – 2010-10-22 07:20:20