当前位置:  开发笔记 > 后端 > 正文

对象之间的通信 - 将自我传递给另一个对象/ Objective-C,Cocoa

如何解决《对象之间的通信-将自我传递给另一个对象/Objective-C,Cocoa》经验,为你挑选了1个好方法。

假设我们有一个第一个Object'Controller',它初始化另一个名为'Tasks'的对象,同时传递'self'以供参考.Tasks对象现在可以与超级'Controller'对象进行通信并发送消息.这对于对象之间的通信是否正确?这通常是怎么做的?我刚刚开始真正学习编程,所以我想知道这是否正常.到目前为止,我依靠代表和通知.这是好习惯吗?

例:

// Controller Object
task = [[Task alloc] initWithController: self];
- (void) runMethod: (NSString *) incoming {
NSLog(@"%@", incoming);
}

// Task Object
- (id) initWithController: (Controller *) ctrlr {
controllerPointer = ctrlr;
[controllerPointer runMethod:@"hello"];
return self
}


// All this should print out "hello"

还有其他方式进行通信,在对象之间进行交互吗?



1> Alex..:

这不是控制器对象(Controller在您的示例中)和模型对象(Task)通常交互的常用方式.对模型 - 视图 - 控制器(MVC)模式有各种各样的解释,但一般来说,控制器对象会观察或查询模型对象,而不是依赖模型来知道控制器是谁以及期望它们直接通信跟他们.

您的设计会在模型和控制器对象之间创建一个不必要的紧密链接.例如,如果您决定添加第二个控制器来管理不同的任务视图,将来会发生什么?您的Task对象是否必须管理与多个控制器的通信?如果您拥有大量的模型对象,那么最终可能需要编写大量代码.

在Cocoa中,模型对象有两种主要方式来通知程序其余部分感兴趣的事件:通知和键值观察(KVO).通知很简单.您使用名称和相关模型对象创建通知,然后将其发布到共享NSNotificationCenter.从那里,通知中心负责将消息传递给订阅它们的任何对象.

KVO有点难以解释.基本上,在幕后,Cocoa有一种机制,用于检测对象的更改并将更新的值直接发送到观察它们的类.(KVO也是Cocoa Bindings基础的一部分,遗憾的是,它不存在于iPhone SDK中)

然而,这两种技术的共同之处在于它们提供了一种通用机制,用于通知任何其他对象在模型对象中发生了某些感兴趣的事情.这些对象如何选择响应完全是它自己的决定.

这种分离使得控制器对象和模型对象之间的依赖性降低,这意味着作为程序员,您可以更少地关注控制器和模型层之间的特定交互.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有