Ios UIViewController子视图发布?
如果我想释放viewControllerIos UIViewController子视图发布?,ios,uiviewcontroller,Ios,Uiviewcontroller,如果我想释放viewController UIViewController *viewController = [[UIViewController alloc] init]; UIView *view1 = [[UIView alloc] init]; [viewController.view addSubview:view1]; [view1 release]; 在释放viewController之前是否需要手动释放view1 [viewController release]; 我应该这
UIViewController *viewController = [[UIViewController alloc] init];
UIView *view1 = [[UIView alloc] init];
[viewController.view addSubview:view1];
[view1 release];
在释放viewController之前是否需要手动释放view1
[viewController release];
我应该这样做吗?或者只需释放viewController?不,您不必这样做。只要释放
viewController
,它就会在内部释放所有的子视图。其余部分将由框架负责
[viewController release];
如果不使用ARC,代码将如下所示
UIView *view = (UIView *)[[viewController.view subviews] objectAtIndex:0];
[view release];
[viewController release];
由于您已经分配了viewController
和view1
一次,因此必须按上图所示释放它一次。您不必再进行发布,因为在此之后您不会再进行任何retain
如果你这样做
UIViewController *viewController = [[UIViewController alloc] init];
UIView *view1 = [[UIView alloc] init];
[viewController.view addSubview:view1];
[view1 release];
[viewController release];
当viewController
被释放时,它通常会导致崩溃,因为您要释放它两次,viewController的子视图也在内部被释放
这里需要注意的一点是,addSubview
保留了中提到的view1
要添加的视图。此视图由接收器保留。
添加后,此视图将显示在任何其他子视图的顶部
一旦viewController
被释放,这将被释放,您不必手动释放它,因为您不拥有它。这是正确的方法
UIView *view = (UIView *)[[viewController.view subviews] objectAtIndex:0];
[view release];
将视图添加为子视图时,它将由viewcontroller保留。
添加子视图:
将视图添加到接收器的子视图列表的末尾
-(void)addSubview:(UIView*)视图
参数
查看
UIViewController *viewController = [[UIViewController alloc] init];
UIView *view1 = [[UIView alloc] init];
[viewController.view addSubview:view1];
[view1 release];
[viewController release];
讨论
此方法保留视图并将其下一个响应程序设置为接收器,
这是它的新superview
视图只能有一个superview。如果视图已具有superview,则
该视图不是接收器,此方法将删除以前的
将接收器设置为新的superview之前,请查看superview
参考文献
重要提示:视图控制器是其视图和任何视图的唯一所有者
它创建的子视图。它负责创建这些视图和
在适当的时候放弃对它们的所有权,例如
当视图控制器本身被释放时
参考:
当您在viewController上调用release时,它肯定会崩溃。当视图控制器的视图仍然显示时,您将如何释放视图控制器?
UIView *view = (UIView *)[[viewController.view subviews] objectAtIndex:0];
[view release];