我刚开始使用Objective C,并且对两个对象之间的通信有疑问。
假设我有一个Object,我们称之为 aTimcode 从main()实例化类“Timecode”,这是一个存储时间码的类(例如01:30:20:10)和有解除/增加时间码的方法以及一些用时间码进行数学运算的方法。
我有第二个对象,我们可以从类“视频”中将其称为 aVideo ,它会在视频上执行一些(openCV)内容,也会在main()中创建。
所以我的main()看起来像:
Timecode *aTimecode = [[Timecode alloc] init];
Video *aVideo = [[Video alloc] init];
[aVideo doFancyOpenCVSTUFF: someparameter];
我现在想要 aVideo 来调用 aTimecode 上的方法。
之类的东西[aTimecode increaseFramesBy: 5];
我知道建立通信的简单方法是在视频中实例化aTimecode:
// somewhere within aVideo
Timecode * aTimceode = [[Timecode alloc] init];
[aTimecode increaseFramesBy: 5];
[aTimecode release];
但当然这会破坏存储在aTimecode中的信息。
但是当程序进一步发展时,我想要很多视频对象( bVideo , cVideo 等...)来贡献 aTimecode中的值并使用之前存储的数字进行数学运算。即使aVideo被发布并且bVideo开始做一些事情, aTimecode 也应该存储它们。
什么是正确的沟通方式?代表们? NSNotification?
可能存在例如 aVideo 向 aTimecode 发送大量消息的情况 - 每秒10次或更多次。什么是在短时间内发送这么多消息的正确方法?
答案 0 :(得分:0)
根据您所描述的内容,在initWithTimecode:
类中创建Video
方法似乎最简单。
这假定Video
使用Timecode
方法而不是可能属于Timecode
的方法,或者可能是其他方法的一部分。如果错误并且您需要传递各种对象类型,那么您将使用协议和委托。
如果Video
只是声明某些事件已经发生并且不关心任何其他对象(或许多)是否正在注意它们,那么通知会更合适。
答案 1 :(得分:0)
如果Timecode对象是某个Video对象的参数,则不一定必须释放它。您可能希望创建一个单独的类,将Timecode对象保留在其中,并将弱引用传递给所有创建的Video对象,之后您可以使用KVO,NSNotifications或委托,无论您最喜欢哪个。但是,代表团似乎是最明智的解决方案。