如何处理自定义 UIViewController 委托 (ARC)?
Posted
技术标签:
【中文标题】如何处理自定义 UIViewController 委托 (ARC)?【英文标题】:What to do about custom UIViewController delegates (ARC)? 【发布时间】:2012-04-20 09:56:32 【问题描述】:我有以下代码:
- (IBAction)mapPressed:(id)sender
MapViewController *mapVC = [[MapViewController alloc] initWithNibName:@"MapViewController" bundle:[NSBundle mainBundle]];
mapVC.delegate = self;
[self.navigationController pushViewController:mapVC animated:YES];
对于 MapViewController:
//MapViewController.h
@protocol MapViewDelegate
@required
- (void)selectedPlacemark:(MKPlacemark*)placemark;
@end
//...
@property (nonatomic, weak) id<MapViewDelegate> delegate;
//...
如果启用了 ARC,我还需要将 mapVC.delegate 设置为 nil 吗?如果是这样,这是否意味着我不应该在本地创建 MapViewController 而是为对象设置实例变量?
【问题讨论】:
这对我来说一切正常。你看到问题了吗?如果是这样,可能有助于更具体地了解它们是什么。或者这只是一个需要仔细检查您是否正确的问题? 好吧,假设 fooViewController 创建 MapViewController 并且 fooViewController 将自己设置为 MapViewController 的委托。如果 fooViewController 被销毁,并且 MapViewController 的委托方法之一被调用,它不会崩溃吗? 我认为不会,我相信这就是弱引用的意义所在。但是,我对 ARC 还没有太多经验,所以我会把它留给有经验的人来确认。 【参考方案1】:刚刚通过this question 确认您不需要将引用设置为 nil。上面的代码应该没问题。
【讨论】:
以上是关于如何处理自定义 UIViewController 委托 (ARC)?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理自定义结果视图的 NSFetchedResultsControllerDelegate 更新
如何处理自定义 UITableViewCell XIB 中的两个视图?