Objective c 如何发布“弹出”视图?
我有一个显示弹出窗口的类。 我对它做了一个alloc初始化,它就出现了Objective c 如何发布“弹出”视图?,objective-c,memory-management,Objective C,Memory Management,我有一个显示弹出窗口的类。 我对它做了一个alloc初始化,它就出现了 DarkVader* darkPopUp = [[DarkVader alloc] init:theButton helpMessage:[theButton.titleLabel.text intValue] isADay:NO offset:0]; 它会自动显示,如果用户按下Ok,它就会消失。我什么时候发布这个 当按下OK按钮时,我可以在课堂上进行[自我释放],对吗? 如果我这样做,分析器会说它的retain计数为+1
DarkVader* darkPopUp = [[DarkVader alloc] init:theButton helpMessage:[theButton.titleLabel.text intValue] isADay:NO offset:0];
它会自动显示,如果用户按下Ok,它就会消失。我什么时候发布这个
当按下OK按钮时,我可以在课堂上进行[自我释放],对吗?
如果我这样做,分析器会说它的retain计数为+1,并在调用函数中泄漏。
如果我在alloc init之后释放它,分析器会说它的retain计数为+0,我不应该释放它
DLog(@"DarkVader retain count: %i", [darkPopUp retainCount]);
说它的计数是2。我很困惑
简言之,我的问题是:如何释放一个被初始化的对象,它做了一些工作并结束了,但调用函数中没有人释放它。我的建议是使用
[self autorelease];
当视图自行关闭时。尽管您查看各种标准视图,但所有视图都会对负责关闭它们的委托执行回调;这让启动对象也负责释放视图。您也不清楚视图或视图控制器是如何显示的。您可以执行与现有Cocoa Touch类类似的操作。例如,请参见如何显示UIAlertView: 很明显,UIAlertView做了一个[self-retain],或者更可能的是,当作为子视图添加到屏幕上show方法的某个地方时,会被保留 正如Paul所提到的,有些Cocoa Touch类确实不支持这种立即释放的方式,而是调用委托方法并让接收者释放它
DLog(@"DarkVader retain count: %i", [darkPopUp retainCount]);
我想说的是,如果您的DarkVader是UIView,您应该让子视图retain处理retain计数。如果它是UIViewController或自定义帮助器类,您有几个选项,委托方式是简单而直接的。如果您想要以您描述的样式自定义弹出窗口,您可能已经有了首先对UIAlertView进行子类化。然后您可以使用它已经实现的保留/发布功能