如何解决代表在Objective-c中
| 目标c中的正常实践是将控制器用作各种协议实现的委托。我说的是使用iOS SDK的时间,还是有一个单独的类来代替一个代表,这是一个好主意吗?还是仅仅是最适合该情况的一种情况?我对目标c中的最佳实践非常好奇,因为我正在学习对其进行单独编码,并且没有“真实世界”专家可以求助。解决方法
\“控制器\”专注于所有权和外观。外部对象将与控制器而不是受控对象对话。通常应直接与“ 0”对话的唯一对象是“ 1”。控制器通常拥有受控对象,并且控制器的使用寿命至少应与受控对象一样长。
\“代表\”专注于行为,策略和观察者。对象向其委托人寻求行为指导(我应该显示此数据吗?应该是什么颜色?我可以执行此操作吗?)。当有趣的事情发生时,对象告诉其委托人(我被感动了。我要完成一些事情。我遇到了问题。)一种特殊的委托人回答数据问题(第3行上的数据是什么?)。这些被称为数据源。
在系统其余部分通常与“控制器”对话的情况下,通常不适合与“代理人”对话。因此,例如,通常有一个指向“ 1”的指针是适当的并从系统中其他位置向其发送消息。指向控制器的“ 3”指针是不合适的。您应该通过控制器进行工作。另一方面,如果您有一个指向对象的指针,通常不宜要求它的“ 4”。如果需要,您可能设计有误。 (最值得一提的示例是ѭ5almost,这几乎总是错误的话题。AppDelegate是应用程序的委托,而不是全局变量的垃圾场。)
如果对象具有控制器,则控制器几乎总是作为委托。按照我上面讨论的规则,当一个对象既是控制器又是委托时,则它是控制器。
单个对象有可能是几件事情的委托,特别是如果大多数事物都是短暂的(例如,警报视图)。 ѭ6被委派给一些事情并不稀奇。
,
将委托人保持为单独的类也使代码干净和可移植。您可以通过复制和粘贴它们并进行较小的更改来将这些委托类用于其他目的。
将代表保持在同一个类中比将他们保持在单独的类中有一个优势。您可以轻松访问类中的私有变量/对象,这在第一种情况下是不可能的。
如果将委托分离,并希望将一些值传递给主类,则可能必须创建另一个委托:-)或添加观察者,或者必须使用某些属性传递它们。
, 简短答案:是的,视图控制器通常是它所管理的视图(或多个视图)的委托。
示例:UITableViewController是一个用于管理UITableView实例的类,它实现表视图委托和表视图数据源协议(数据源只是另一种委托)。同样,视图控制器自然会成为选择器视图,搜索栏,文本字段等的委托。
基本原理:视图实际上不应该知道它们显示的数据来自何处,但是视图控制器知道,因此,他们很自然地可以提供数据并就给定视图的行为做出决定。对于其他类型的对象也是如此,但是您必须使用一些常识。该应用程序具有自己的委托对象,该委托对象通常负责创建至少一些视图控制器,通常还负责创建数据模型,因此,显然,由视图控制器扮演该角色是没有意义的。
, 最佳实践取决于要求以及代码。最常用的最佳实践是MVC模式。一旦实施,您将得到想法。您还可以阅读一些设计模式。但是对于iPhone我更喜欢MVC。对于委托人,是的,在Objective-c中,将控制器用作委托人是正常的做法。以这种方式设计物镜-c。
,如果您打算将信息广播到应用程序的多个部分,则NSNotification是一个不错的选择(即使它可能使其他人难以理解也是如此)。
在其他情况下,让委托与协议相关联是一种使事情变得清晰和代码分离的好选择。
KVC也是在代码中实现交互的另一种方法:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html
根据您计划要做的事情,一个解决方案可能会比另一个解决方案更好,最好是使用每种解决方案以了解更多有关它们的信息。它将帮助您在设计下一个解决方案时做出正确的决定。 iOS应用程序!
, 我来啦:
假设您有一个A类和另一个B类。
\“ a \”是A类的对象
如果您实例化B,则在\“ a \”中将其表示为\“ b \”并传递给它自己,即\“ a \”
现在,您可以轻松触发刚刚传递给\“ b \”的变量\“ a \”的方法,因为您可以访问该对象。但是,当您完成B类并开始释放\“ b \”时,灾难就开始了。现在由于使用\“ a \”,分配给\“ b \”的所有内存都将被释放但也不会被释放,并且只要不释放\“ a \”就会被纠缠。如果您递归使用B类的实例化,请上帝保佑您。
因此,通过使用委托,您可以使用类A的所有所需方法,并使自己也远离此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。