Memory management 使用ARC添加UIViewController的子视图后如何保留视图
当我使用ARC并添加UIViewController的视图时,如何处理这种情况Memory management 使用ARC添加UIViewController的子视图后如何保留视图,memory-management,uiview,Memory Management,Uiview,当我使用ARC并添加UIViewController的视图时,如何处理这种情况 MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; [someView addSubview:vc.view]; //this retain vc.view 因为addSubview保留onlu视图,而不是控制器,所以控制器被释放。在ARC之前,有一种方法可以根据需要保留控
MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[someView addSubview:vc.view]; //this retain vc.view
因为addSubview保留onlu视图,而不是控制器,所以控制器被释放。在ARC之前,有一种方法可以根据需要保留控制器,但如何防止ARC释放视图控制器?为什么需要一个新的视图控制器?
MyViewController *vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[someView addSubview:vc.view]; //this retain vc.view
您只需将视图添加为子视图,并使用“someView”的ViewController处理所有问题。我通过将vc声明为具有默认强属性的属性,解决了类似的问题。
#定义AntiARCRetain(…)void*retainedThing=(bridge_retained void*)_VA_ARGS;保留内容=保留内容
然后调用AntiARCRetain(控制器) 因为当viewcontroller被释放时,视图并没有被释放,如果您试图对视图执行任何与(已经)释放的控制器相关的操作,这将导致崩溃。我认为这是目前唯一的解决方案。只要声明的属性不会更改,视图控制器将保留在内存中,并且始终会重定时控制器的一个副本,即使它已从父视图控制器中删除(自iOS 5.0起使用removeFromParentViewController),它仍会保留该对象。