ios - 委托(delegate)优势

标签 ios objective-c delegates

<分区>


想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它.

关闭 9 年前

我有一个关于委托(delegate)概念的一般性问题。我看过一个代码示例,其中基本上 (VC = ViewController) VC1 打开 VC2 并通过 segue 将一个对象传递给它。 VC2 修改对象并将其传回 vc1,然后自行关闭。

VC2 有一个 @property (assign, nonatomic) id<DismissViewDelegate> delegate;属性(property)。在 VC1 通过 segue 打开 VC2 之前,它设置 VC2.delegate = self; . VC1和VC2都实现了如下协议(protocol):

DismissViewDelegate.h

@protocol DismissViewDelegate <NSObject>

-(void)dismissWithProdukt:(Produkt*)produkt;

@end

我的问题是,由于我不熟悉自己创建的委托(delegate)和协议(protocol),这种方法与为 VC2 提供指向 VC1 的弱指针有何不同,例如:

@property (weak, nonatomic) VC1 *firstVC;

所以我可以说:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    VC2 *vc2 = *dvc = segue.destinationViewController;
    vc2.firstVC = self;
}

然后,在修改对象之后,我会从 VC2 传递对象,如 firstVC.object = self.object然后关闭VC2。

这两种方法和结果有什么不同吗?或者第二种解决方案是否有效?委托(delegate)方法的优势在哪里?非常感谢!

最佳答案

您始终可以将一个 Controller 的弱指针指向另一个 Controller ,但委托(delegate)的目的不仅仅是拥有该弱链接。您可以将方法与委托(delegate)相关联,从而为您提供组织良好的代码。尽管您始终可以提供弱指针,然后使用该弱指针执行方法(尽管这不是可接受的做法)

关于ios - 委托(delegate)优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20775169/

上一篇:ios - 使用 segue 传递 tableviewcell 数据?

下一篇:ios - 使用点击手势时无法访问表格 View

相关文章:

iphone - 如何调整 iPhone 中的 AlertView 大小

c# - Func<string,string> 和 delegate 有什么区别?

c# - 循环中的匿名 c# 委托(delegate)

objective-c - present Modal ViewController 给出黑屏

ios - NSUserDefault 常量未更新

ios - 如何在成功的 FB ShareDialog 帖子后获取帖子 ID

objective-c - SSL 的问题或我对它的误解

jquery - 是否可以在 jquery 的委托(delegate)函数中添加多个选择器?

ios - 如何实时获取UITableView的滚动位置

ios - Swift 从 NSHTTPURLResponse 获取 Last-Modified 属性作为 NSDate