【发布时间】:2013-12-25 17:21:44
【问题描述】:
我有一个关于委托概念的一般性问题。我看过一个代码示例,基本上 (VC = ViewController) VC1 打开 VC2 并通过 segue 将一个对象传递给它。 VC2 修改对象并将其传递回 vc1,然后自行关闭。
VC2 有一个@property (assign, nonatomic) id<DismissViewDelegate> delegate; 属性。在 VC1 通过 segue 打开 VC2 之前,它设置了VC2.delegate = self;。 VC1 和 VC2 都实现了以下协议:
DismissViewDelegate.h
@protocol DismissViewDelegate <NSObject>
-(void)dismissWithProdukt:(Produkt*)produkt;
@end
我的问题是,由于我是自创委托和协议的新手,这种方法与为 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。
这两种方法的结果有区别吗?或者第二种解决方案是否有效?委托方法的优势在哪里?非常感谢!
【问题讨论】:
-
@property (weak, nonatomic) VC1 *firstVC;应该给你一个线索,为什么委托更好更优雅:不同的视图控制器必须相互了解。没有委托,他们只需要相互信任委托协议已实现。
标签: ios objective-c delegates