Iphone retaining count是调用release之后的一个计数

Iphone retaining count是调用release之后的一个计数,iphone,memory-management,uiview,uiviewcontroller,Iphone,Memory Management,Uiview,Uiviewcontroller,我有一个视图控制器,它的视图是从nib文件加载的。nib文件包含主视图,其子视图为滚动视图。在view controller的viewDidLoad方法中,滚动视图的保留计数为2(创建时为1,保留时为1)。当调用视图控制器的dealloc方法时,我释放了scroll视图,但是它的retain计数只减少到1,这是有意义的,因为它在开始时是2 基于上述场景,我的问题是:在dealloc方法返回后,是否会完全释放滚动视图,因为此时主视图会被释放,从而强制删除/释放其所有子视图(如滚动视图)?或者,这次

我有一个视图控制器,它的视图是从nib文件加载的。nib文件包含主视图,其子视图为滚动视图。在view controller的viewDidLoad方法中,滚动视图的保留计数为2(创建时为1,保留时为1)。当调用视图控制器的dealloc方法时,我释放了scroll视图,但是它的retain计数只减少到1,这是有意义的,因为它在开始时是2

基于上述场景,我的问题是:在dealloc方法返回后,是否会完全释放滚动视图,因为此时主视图会被释放,从而强制删除/释放其所有子视图(如滚动视图)?或者,这次发布是在不同的时间点发生的吗

谢谢


编辑:如果在我释放滚动视图后,我将其设置为零(而保留计数仍然为1),该滚动视图会被完全释放吗

它由它所在的superview保留,当该superview消失时,它将获得另一个版本(因此,如果保留计数变为零,则解除锁定)。如果您感到好奇,可以将UIScrollView子类化,并在dealloc函数中放置一个NSLog或断点以确保安全。或者,使用泄漏仪器运行,查看它是否显示为泄漏。

是,当您在最后调用
[super dealoc]
时。

谢谢您的确认。最后一个快速问题:如果在我释放滚动视图后,我将其设置为零(而保留计数仍然为1),该滚动视图是否会被完全释放?谢谢您的确认。最后一个快速问题:如果在我释放滚动视图后,我将其设置为nil(而保留计数仍然为1),那么滚动视图是否会完全释放?您没有将对象设置为nil,只将变量设置为nil。将保留属性设置为nil会产生释放对象一次的效果。将“assign”属性设置为nil对对象的保留计数没有影响。变量没有保留计数,只有对象有保留计数。我知道,但通过将nil赋值给属性,我失去了它以前指向的对象的引用/指针。我假设superview保留了对scroll视图的引用,这就是任何子视图最终被释放的方式。谢谢。如果您的属性中的对象的保留计数为1,并且您的属性为“保留”类型,则执行“self.prop=nil”将释放该对象,将其保留计数设置为零,并触发该对象的解除锁定。感谢您的回复。我说的是发布[滚动视图];scrollView=nil;在视图控制器的dealloc方法内部。。你真的应该看看这个。