为啥“进程无法连接到subscriber
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥“进程无法连接到subscriber相关的知识,希望对你有一定的参考价值。
参考技术A 网关、DNS服务器联网方式下,及使用代理服务器上网的。仔细检查计算机的网络设置。为啥不继承 UIApplication?为啥要使用委托?
【中文标题】为啥不继承 UIApplication?为啥要使用委托?【英文标题】:Why not subclass UIApplication? Why use a delegate?为什么不继承 UIApplication?为什么要使用委托? 【发布时间】:2012-05-26 04:47:09 【问题描述】:除了使用应用程序委托以便UIApplication
单例可以在预定义的时间调用委托方法之外,仅继承UIApplication
的优点和缺点是什么? (更新:为什么 iOS 架构使用应用程序委托,而不是让人们通过继承 UIApplication
并覆盖其各种方法来编写应用程序?)
这是因为当我们创建一个新的UIView
控件时,我们继承了UIView
(更新: 或者我们也继承了UIViewController
)。那么为什么在应用的情况下,我们不继承UIApplication
,而是使用委托呢?
【问题讨论】:
小仅供参考,您可以继承 UIApplication 并在您的应用程序中使用该子类,方法是将其名称传递给主函数中的正确参数。 【参考方案1】:再次,来自文档:
子类化注释
您可能决定继承 UIApplication 以覆盖 sendEvent: 或 sendAction:to:from:forEvent: 实现自定义事件和动作 调度。然而,很少有有效的需要扩展这个 班级;应用程序委托(UIApplicationDelegate 就足够了 大多数场合。如果你做 UIApplication 的子类,一定要 你想用子类完成什么。
【讨论】:
【参考方案2】:来自UIApplication Class Reference:
UIApplication 类为在 iOS 上运行的应用程序提供了一个集中的控制点和协调点。
每个应用程序都必须只有一个 UIApplication 实例(或 UIApplication 的子类)。启动应用程序时,调用 UIApplicationMain 函数;在它的其他任务中,这个函数创建了一个单例 UIApplication 对象。此后,您可以通过调用 sharedApplication 类方法来访问此对象。
那么你所说的“为什么我们不继承 UIApplication 是什么意思?Apple 甚至提供了关于在子类中实现什么的说明。
至于您关于仅在标准类上使用委托和单例的问题,答案很简单:应用程序必须提供一种通用的方式来接收和分派事件(外部和系统相关)、处理多任务处理以及与系统(这就是 main.m 包含对您的应用委托的引用的原因)。
【讨论】:
为什么我们不继承UIApplication
并覆盖各种方法来完成这些任务?有优点/缺点吗?
相反,苹果甚至推荐你的子类,虽然很少有人这样做,因为就像@borrrden 说的那样:没有理由这样做。你可能想要子类化它做什么?
也许我没有说清楚...我想知道为什么iOS架构不创建一个模板,只是子类UIApplication
并覆盖各种方法,而是使用单独的应用程序委托...
app delegate 曾经是 UIApplication 的子类(Xcode 4.x 之前),但现在它是 UIResponder 的子类,这更有意义,因为 UIResponder 是关于事件的。所以这更像是一个历史事件,而不是实际的掩饰。
@CodaFi 默认AppDelegate
曾经是NSObject
的子类,而不是UIApplication
子类。它还有UIApplicationDelegate
的协议。【参考方案3】:
开发人员通常不这样做的原因是没有必要。 UIApplication 在大多数情况下都可以正常工作。它只需要一些关于在某些预定义情况下做什么的提示(这就是它有一个委托的原因)。另一方面,UIView 非常通用,我认为它从未按原样使用过。它可能是整个 iOS 世界中自定义程度最高的类。
【讨论】:
【参考方案4】:委托是一种核心设计模式。它允许在程序的各个部分之间分离职责。这个想法是,例如,绘制到屏幕上的程序部分可能不应该与您的数据库对话。这有几个原因:
性能:如果在屏幕上绘制的同一个对象访问您的数据存储,您将遇到性能问题。时期。句号。
代码维护:将适当模块化的代码概念化更容易。 (反正对我来说)
灵活性:如果您在代码中进行子类化,那就太好了 - 直到您开始遇到具有各种不良行为的单体类。您将达到必须重载行为以关闭事物的地步,并且您的属性命名空间可能会被污染。尝试使用类别、委托和块来寻找替代方案。
也就是说,我确实遇到了适合子类化的情况。我有一个自助服务终端应用程序,如果一段时间内没有与之交互,我想在其中自动关闭某个设置菜单。为此,我必须能够访问整个应用程序中的触摸事件。我继承了UIApplication
并覆盖了sendEvent:
。那是合适的,尽管这是一个边缘案例。正如所罗门王在传道书中所说,意译为:阳光下的一切都有时间和地点。
为了更容易编写、阅读、迭代和维护您的程序,强烈建议您遵循某些做法。欢迎您对许多类进行子类化,Apple 不会因为您的应用程序代码不佳而拒绝您的应用程序,只要它按照宣传的方式运行即可。也就是说,如果你不遵守经过实践检验的具体做法,你就是在自掘坟墓。子类化本身并不坏,但类别、协议和块是如此迷人,我还是更喜欢它们。
【讨论】:
您的回答比 *** 上的许多其他人都长,并且包含有价值的信息,但我认为它在某些方面是错误的。例如,我不认为现在的性能是 UI 代码和数据库访问代码分离的原因。就像你说的,分离和模块化是一个更好、更合理的理由。另外,我不认为像您所做的那样覆盖UIApplications
sendEvent:
方法确实是必要的。因为它是您关注的单个控件,所以您可以将该单个类子类化并覆盖 'touchesBegan:withEvent:' 等。【参考方案5】:
UIView 子类可能需要做许多专门的事情。想想 UIScrollView、UIImageView、UIWebView 等,它们的内部工作方式必须有多么大的不同。但是,它们仍然必须参与视图层次结构,因此子类化是有意义的。
另一方面,UIApplication 是应用程序范围的事件、通知、打开 URL、访问窗口和其他通用事物的中心枢纽。在正常情况下,应用程序应该只需要知道UIApplicationDelegate Protocol 将提供的东西。
UIApplication Overview 的注释解释了您可能继承 UIApplication 的一个原因:
您可能决定继承 UIApplication 以覆盖 sendEvent: 或 sendAction:to:from:forEvent: 以实现自定义事件和动作调度。然而,很少有必要扩展这个类;应用程序委托(UIApplicationDelegate 在大多数情况下就足够了。如果您将 UIApplication 子类化,请务必确定您要通过子类完成什么。
但这应该只在非常特殊的情况下才需要。
【讨论】:
所以我认为你的意思是,如果它是一个相当空的类,例如UIView
,那么对其进行子类化是有意义的。但是,如果它是像UIApplication
这样完全实现的类,我们只需要一个委托来在预定义的时间做特定的事情……也就是说,如果它是一个小的未知部分,那么使用委托就可以了
我也刚刚在 Cocoa 设计模式一书中读到,如果我们使用委托,UIApplication
内可能会有更好的封装,因为如果我们将其子类化,则更有可能污染@987654326 @【参考方案6】:
我将添加一些其他人没有提到的内容:委托消除了在通过委托方法实现而不是具有重写方法的子类覆盖/增强/添加行为时调用 super 的需要。我见过许多开发人员回答他们自己的 *** 问题时只是忘记了调用 super(在有些人甚至发布了可能的答案之后)。较新的方法装饰器NS_REQUIRES_SUPER
通过向开发人员发出警告(希望他们不要忽略它!)对此有所帮助,但是当调用 super 的顺序很重要时,它并没有帮助。我认为 Apple 认为让开发人员实现一个委托对象不太容易出错,它没有调用超级要求,他们甚至还努力将 UIResponder 方法从 UIApplication 转发到委托对象。
【讨论】:
以上是关于为啥“进程无法连接到subscriber的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?