我正在尝试在 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];
或者有没有我根本没有想到的 OO 解决方案会更好?
最佳答案
在 Objective-C 数据源的传统中,我个人会考虑某种“设置”类。设置一个类,负责成为每个单独应用程序的“数据源”:让它为特定应用程序所需的值提供一组方法,或者返回适当值的单个“getValueForKey”式方法.
无论哪种方式,解决方案:
- 在代码中保留值
- 为每个设置移除一个巨大的 plist 的开销,其中一些可能不会被使用
- 消除了拆分成一堆小 plist 文件的工作
- 允许您让其他类在任何需要的地方调用您的数据源
- 为您提供 OO 的灵 active (理论上,您可以根据情况或需要对数据源进行子类化)
- 本地化您需要进行的更改;只需将数据源类作为您在不同应用程序之间重用的类集的一部分,并根据需要调整该类(而不必更改其他类中的内容)
- 允许您为您不希望在特定应用程序中需要的数据值设置合理的默认值 - 甚至抛出异常,而无需在每个调用类中显式回退代码(在数据源类)
关于iphone - 具有自定义值 : The right way 的可重用 Objc 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2650855/