代码之家  ›  专栏  ›  技术社区  ›  2snacc

具有自定义值的可重用Obj-C类:正确的方法

  •  4
  • 2snacc  · 技术社区  · 16 年前

    我试图在iPhone应用程序之间重用一组Obj-C类。不同应用程序之间的值已经被隔离,我正在尝试找出将这些自定义值应用于基于应用程序的类的最佳方法。

    // I might have 10 customizable values for each class, that's a long signature!
    CarController *controller = [[CarController alloc] initWithFontName:@"Vroom" engine:@"Diesel" color:@"Red" number:11];
    

    我应该把它们放在大箱子里吗 settings.plist ?

    // Wasteful!  I sometimes only use 2-3 of 50 settings!
    AllMyAppSettings *settings = [[AllMyAppSettings alloc] initFromDisk:@"settings.plist"];
    CarController *controller = [[CarController alloc] initWithSettings:settings];
    [settings release];
    

    我应该有一点,可选的吗 n_settings.plist 每节课有多少?

    // Sometimes I customize
    CarControllerSettings *carSettings = [[CarControllerSettings alloc] initFromDisk:@"car_settings.plist"];
    CarController *controller = [[CarController alloc] initWithSettings:carSettings];
    [carSettings release];
    
    // Sometimes I don't, and CarController falls back to internally stored, reasonable defaults.
    CarController *controller = [[CarController alloc] initWithSettings:nil];
    

    3 回复  |  直到 16 年前
        1
  •  1
  •   Tim    16 年前

    在Objto-C数据源的传统中,我个人会考虑一些“设置”类。设置一个类,该类负责成为每个应用程序的“数据源”:让它为特定应用程序所需的值提供一组方法,或者提供一个返回相应值的“getValueForKey”样式的方法。

    不管怎样,解决方案是:

    • 在代码中保留值
    • 为每个设置移除一个大型plist的开销,其中一些可能不被使用
    • 消除了分割成束的小plist文件的工作
    • 允许其他类在需要时调用数据源
    • 为您提供了面向对象的灵活性(理论上,您可以在出现情况或需要时对数据源进行子类化)
    • 本地化您需要进行的更改;只需将数据源类作为从一个应用程序到另一个应用程序重用的类集合的一部分,并根据需要调整该类(而不必在其他类中更改内容)
    • 允许您为特定应用程序中不需要的数据值设置合理的默认值,甚至抛出异常,而无需在每个调用类中都使用显式回退代码(在数据源类中编写一次默认值或异常)
        2
  •  1
  •   drawnonward    16 年前

    respondsToSelector: 允许可选的委托方法。

    您可以让代理在xml/plist文件中查找详细信息,在这种情况下,您可以将所有信息放在一个地方,甚至可以下载一个新文件来更改一些细节。

    你所有的班级都可以有相同的课程 initWithDelegate:

        3
  •  1
  •   Frank C.    16 年前

    普拉里多格,

    绝对地将设置外部化为plist之类的东西。您甚至可以有多个与特定情况对齐的plist(例如settingsMac.plist、setting虹吸.plist)。

    当你的应用程序决定它在什么环境下运行时,它会通过一个委托或一个中心单例加载适当的设置。

    通过外部化,您将降低应用程序的平均维护成本。与重新编译/重新测试/重新打包/重新部署相比,管理和部署plist更新的成本更低。

    --弗兰克