Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标视图控制器上的简单委托方法或属性_Ios - Fatal编程技术网

Ios 目标视图控制器上的简单委托方法或属性

Ios 目标视图控制器上的简单委托方法或属性,ios,Ios,这是一个关于公约/最佳做法的问题。假设您有两个视图控制器Foo和BarFoo显示一个事物列表,每个事物都有一个与之关联的图像,Bar用于显示该图像。例如,Foo可能会显示一个人名列表,按下其中一个人名会显示该人使用Bar控制器的照片。因此,Bar需要一段来自Foo的简单信息,在这种情况下,需要显示一幅图像 有两种方法可以将图像发送到栏: i) 将Foo设置为Bars委托,使用我们定义的某种BarDelegate协议,并使BarDelegate具有沿着-(UIImage*)imageToPrese

这是一个关于公约/最佳做法的问题。假设您有两个视图控制器
Foo
Bar
Foo
显示一个事物列表,每个事物都有一个与之关联的图像,
Bar
用于显示该图像。例如,
Foo
可能会显示一个人名列表,按下其中一个人名会显示该人使用
Bar
控制器的照片。因此,
Bar
需要一段来自
Foo
的简单信息,在这种情况下,需要显示一幅图像

有两种方法可以将图像发送到

i) 将
Foo
设置为
Bar
s委托,使用我们定义的某种
BarDelegate
协议,并使
BarDelegate
具有沿着
-(UIImage*)imageToPresent行的强制方法
ii)在
条上有一个简单的属性,例如
@property(非原子,弱)UIImage*imageToPresent
并让
Foo
在切换到
Bar
之前设置此属性

在这两种情况下,有没有一种惯例或更可取的解决办法


据我所知,委托方法的优势在于,您可以明确表示,要使
条码
正常工作,需要做一些事情。当然,
Foo
可能会忘记将自己设置为
Bar
s委托,但是如果
Bar
有10个必需的属性,那么现在仍然只有一个地方需要处理(忘记设置委托),而不是10个。仅使用属性的优点是它使代码更加简洁。我应该注意的是,我只对有问题的属性在目标视图控制器的生命周期中保持不变的情况感兴趣。我理解,如果属性在整个生命周期中是可变的,并且目标视图控制器需要多次“查询”源视图控制器,则委托可能具有额外的吸引力。

委托通常用于允许委托对象与主对象通信,用于请求附加数据或执行回调

在您的情况下,没有理由不立即向委托对象提供它所需要的一切,因为您已经有了它,所以第二种选择将是最合理的方式

一般来说,委托流程大致是这样的

Foo:“嗨,酒吧,这是给你的任务。使用这些数据,做你的事情”

[稍后]

酒吧:“嘿,老板,这件事刚刚发生了!”
Foo:“哦,太好了!谢谢你让我知道”

[稍后]

酒吧:“嘿,老板,我还需要一些东西来完成这项工作”
Foo:“这是”

[稍后]

酒吧:“嘿,老板,我做完了!这是我工作的结果”

自定义
Baz
协议的定义适用于
Baz
需要与
Foo
通信的情况(例如,用户在详细视图上进行了选择)

在这种情况下,您通常会定义如下内容

@protocol BazDelegate
- (void)baz:(Baz *)baz didFinishSelectingWhatever:(id)whatever;
@end

然后在
Foo
中实现它,以从委托对象接收有意义的回调。

委托通常用于允许委托对象与主对象通信,以请求附加数据或执行回调

在您的情况下,没有理由不立即向委托对象提供它所需要的一切,因为您已经有了它,所以第二种选择将是最合理的方式

一般来说,委托流程大致是这样的

Foo:“嗨,酒吧,这是给你的任务。使用这些数据,做你的事情”

[稍后]

酒吧:“嘿,老板,这件事刚刚发生了!”
Foo:“哦,太好了!谢谢你让我知道”

[稍后]

酒吧:“嘿,老板,我还需要一些东西来完成这项工作”
Foo:“这是”

[稍后]

酒吧:“嘿,老板,我做完了!这是我工作的结果”

自定义
Baz
协议的定义适用于
Baz
需要与
Foo
通信的情况(例如,用户在详细视图上进行了选择)

在这种情况下,您通常会定义如下内容

@protocol BazDelegate
- (void)baz:(Baz *)baz didFinishSelectingWhatever:(id)whatever;
@end
然后在
Foo
中实现它,以从委托对象接收有意义的回调