我正在为popover创建一个(UIPopoverController)popover控制器和(UINavigationController)导航控制器,其中两个控制器都在头文件中声明。然后,当它们被创建时:
myNavController = [[UINavigationController alloc] initWithRootViewController:[[[MyPopoverControllerClass alloc] initWithNibName:@"MyPopoverNib" bundle:[NSBundle mainBundle]]autorelease]];
myPopoverController = [[UIPopoverController alloc] initWithContentViewController:myNavController];
此时,释放myNavController是否安全?
答案 0 :(得分:2)
如果此类不打算再次引用它,您可以在初始化弹出控制器后释放导航控制器。
答案 1 :(得分:1)
如果myNavController
是实例变量,则在dealloc
方法之前不应将其释放。如果它只是一个局部变量,你应该在该方法中最后一次引用后释放它。
答案 2 :(得分:0)
只要想一下Object Ownership and Disposal惯例,简要说明如果你已经分配了一个对象,那么你就是它的拥有者。
换句话说,一旦您不需要,您就有权发布myNavController
。
另一方面,UIPopoverController
应使用保留对myNavController
拥有所有权。
所以,(再次)是的。您可以放心地发布myNavController
。
在一些罕见的情况下,所有权惯例规则不受尊重。特定方法的文档中提到了这些异常。但事实并非如此。
让我们为您的代码段应用这些规则: 在第一行
myNavController = [[UINavigationController alloc] initWithRootViewController:[[[MyPopoverControllerClass alloc] initWithNibName:@"MyPopoverNib" bundle:[NSBundle mainBundle]]autorelease]];
myNavController
的保留计数至少 1。
第二行
myPopoverController = [[UIPopoverController alloc] initWithContentViewController:myNavController];
通过myNavController
内的所有权,将导致initWithContentViewController
的保留计数至少 2。