Iphone 目标C[物体释放]
我正在查看其他人的代码,但它似乎发布了对象视频,但随后继续使用它 现在,从我对面向对象编程语言的理解来看,一旦它发布,就应该从内存中释放出来 我看不出它有什么参考资料……但我想这就是它没问题的原因。这似乎是一件很奇怪的事情,(当你还没有完成的时候就发布它,比如为什么不使用自动释放) 这一行实际上调用了Iphone 目标C[物体释放],iphone,objective-c,oop,release,reference-counting,Iphone,Objective C,Oop,Release,Reference Counting,我正在查看其他人的代码,但它似乎发布了对象视频,但随后继续使用它 现在,从我对面向对象编程语言的理解来看,一旦它发布,就应该从内存中释放出来 我看不出它有什么参考资料……但我想这就是它没问题的原因。这似乎是一件很奇怪的事情,(当你还没有完成的时候就发布它,比如为什么不使用自动释放) 这一行实际上调用了-setVideo:方法,其中可能保留了视频变量(如果使用retain属性声明了相应的属性)。所以视频对象的保留计数变为2,为了补偿额外的保留,我们释放它。对象只有在其保留计数变为0时才会解除分配,
-setVideo:
方法,其中可能保留了视频变量(如果使用retain属性声明了相应的属性)。所以视频对象的保留计数变为2,为了补偿额外的保留,我们释放它。对象只有在其保留计数变为0时才会解除分配,因此这样做是安全的
我们还需要在代码中的某个地方发布视频(例如,在dealloc方法中),以确保视频对象在不需要时被销毁,以避免内存泄漏。它相当于:
self.video=[[[VideoFrameExtractor alloc]initWithVideo:[实用程序绑定路径:@“sophie.mov”]]自动释放]代码>
(假设视频由自己保留)
在可能的情况下,通过避免自动释放池,有一个小的性能提升,并且它有助于定位代码中有关引用计数的错误。苏。。。假设属性是retain或copy,那么self应该只包含一个引用-这是完美的
希望这能有所帮助。为什么不在释放视频对象之前获取宽度和高度?不是我的代码,但似乎因为释放时保留计数为2,所以位置没有区别。
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"]];