代表在Objective-c中

如何解决代表在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 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res