如何处理自定义 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 中的两个视图?

如何处理自定义 android 视图/小部件的可见性更改

iOS - 如何处理自定义表格单元格中的方向变化

使用 pd.read_clipboard 复制数据帧时如何处理自定义命名索引?

Spring DBUnit 插入数据的时候如何处理自增ID