Objective C中的工厂方法模式:NSClassFromString()

时间:2012-03-04 16:59:52

标签: objective-c design-patterns factory-pattern

我已经在我正在开发的应用程序中找到了一个区域,其中工厂方法模式似乎合适。我对其他语言(C#,Java)中的这种模式非常熟悉,但我正在阅读“可可设计模式”一书,它包含一章动态创建,其中展示了如何使用NSClassFromString()方法。在这个功能中,它说:

  

在许多情况下,这个单一功能有效地将众所周知的工厂方法模式简化为单行代码。

我想知道我是否应该使用这种动态创建方法而不是典型的工厂方法模式?动态创建方法每次都会胜过常规方法,还是有一种方法比其他方法更适合?

现在,我倾向于使用常规的工厂方法模式,但我想知道其他人的想法?

此致 尼克

1 个答案:

答案 0 :(得分:3)

我会说,书中的说法有点强烈。

您应该在两种情况下使用NSClassFromString

  • 您在运行时将类名称作为字符串读取。显然,如果将类名称作为字符串,则必须以某种方式将其转换为类对象,而NSClassFromString是一种方法。如果您不信任字符串的来源,则应该针对允许类的白名单测试字符串(或返回的类对象)。

  • 您是弱链接框架并使用不支持NS_CLASS_AVAILABLE功能的SDK /平台。有关详细信息,请查看SDK Compatibility Guide

在任何其他情况下,使用类似[MyClass class]的表达式获取类对象可能更好。这样,如果该类不存在,您将在编译时遇到错误(例如,因为您错误拼写了类名)。