【问题标题】:Is it all right to have multiple app delegates in the same project, for different targets?对于不同的目标,在同一个项目中有多个应用程序委托是否可以?
【发布时间】:2012-10-18 19:01:53
【问题描述】:

我正在开发一个 iOS 应用。让我印象深刻的第一件事是顶级项目中的多个应用程序委托,它有多个目标输出。我知道每个子项目都有自己的应用程序委托。我的团队成员告诉我,这些应用程序委托用于不同的目标,但它们具有几乎相同的代码,除了一些变量来自不同的类或子项目。在一个项目中拥有多个应用代理的优缺点是什么?

【问题讨论】:

    标签: ios cocoa-touch uiapplicationdelegate


    【解决方案1】:

    这个结构很好,如果应用委托中有一些实际上不同的东西。如果其中一些相同,请考虑如何重组该代码(这样您就没有重复的代码)。将公共代码放在超类中是一种方法,但还有其他几种方法。由于子类化非常强大,因此通常更可取的是另一种方法(例如组合)。

    应用程序委托的一个问题是它可能会影响您的资源 - 即,如果类名不同,那么当这些资源可能完全相同时,您可能会面临资源的细微差异(例如 NIB)。

    基本经验法则:如果您发现自己面临重复代码,请找到避免重复该代码的方法,或者在该重复代码已经重复的情况下删除该重复代码。 p>

    【讨论】:

    • 是的,有很多重复的代码。我只是在查看代码。我还没有为 appdelegate 做任何子类化或超类化。所以最好有 UIResponder 类型的基类,就像普通的 appdelegate 一样,然后从基类中子类化 appdelegate 并且在重要的地方或重写方法或使用其他变量。这就是我马上想到的。也欢迎任何其他建议。
    • @user 我首先将所有可能(合理地)移出应用程序委托:) 考虑组合而不是子类化,您可以通过查询应用程序的 plist 来动态确定您正在运行的应用程序.所以这个重复的代码是不必要的。如果您处于领导地位,只需告诉他们停止重复代码并弄清楚如何重组程序/目标。所有这些特殊情况和重复代码通常会成为维护的噩梦(根据我的经验)。
    • 作曲听起来很有趣。我不知道它现在是如何完成的,但必须学习。感谢您花时间解释。
    • @user 好吧,组合的一个示例(如果您甚至想将所有内容保留在应用程序委托中)将拥有一个应用程序委托的 ivar,其类型/类因应用程序而异正在运行。因此,当您初始化应用程序委托时,应用程序代理可以确定它是哪个应用程序,然后根据正在运行的应用程序创建MONApp1DataProviderMONApp2DataProvider。当然,它们要么采用相同的协议,要么有一个共同的超类来定制它们的行为。
    • @user 推荐:这可能是一个很好的起点:en.wikipedia.org/wiki/Composition_over_inheritance
    猜你喜欢
    • 2013-12-05
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多