这是一个关于约定/最佳实践的问题。假设您有两个视图控制器Foo
和Bar
. Foo
显示一个事物列表,每个事物都有一个与之关联的图像,Bar
用于呈现。例如Foo
,可能会显示一个人名列表,然后按下其中一个人名会显示该人使用Bar
控制器的图片。所以Bar
需要一条简单的信息Foo
——在这种情况下,是要显示的图像。
我们可以通过两种方式获取图像Bar
:
i) 设置Foo
为s 委托,使用我们定义Bar
的某种协议,并且具有沿线的强制方法
ii) 在 上具有简单属性,例如,并在转到 之前设置了此属性。BarDelegate
BarDelegate
- (UIImage *)imageToPresent;
Bar
@property (nonatomic, weak) UIImage *imageToPresent;
Foo
Bar
这两者有约定或首选方式吗?
我能说的最好的一点是,委托方法的优点是您可以明确说明需要一些东西Bar
才能工作。当然,Foo
可能会忘记将自己设置为Bar
s 委托,但如果Bar
说 10 个必需的属性,现在仍然只有一个地方可以搞砸(忘记设置委托)而不是 10 个。只使用属性的好处是它使代码更简洁。我应该注意,我只对所讨论的属性在目标视图控制器的生命周期中保持不变的情况感兴趣。我知道,如果属性在整个生命周期中是变体的,并且目标视图控制器需要多次“查询”源视图控制器,那么委派可能会产生额外的吸引力。