我将在哪里实现一个通用方法,由3个不同的View控制器使用?

时间:2012-08-21 12:46:26

标签: objective-c ios generics implementation

我有 3个ViewControllers

这些控制器中的每一个都需要对给定的核心数据对象执行计算。

这些计算因对象类型和控制器而异。

方法是,

performTimeOperations:(Year *) // VC1
performTimeOperations:(Month *) // VC2
performTimeOperations:(Day *) // VC3

每个代码大约有50行代码。

但是每个代码的代码变化都很小,我真的想传递一个ID,就像这样,

performTimeOperations:(id)

让它处理我抛出的每一种物体。

主要是因为我所做的每一项改变,都必须在3个地方进行。

你会在哪里实现这个?怎么样?

我应该查看类别吗?我也不认为这应该放在我的appDelegate中...但它肯定会比有3个实现更好的地方吗?

感谢任何建议

谢谢!

努诺

3 个答案:

答案 0 :(得分:2)

为什么不让所有核心数据对象都从实现此方法的公共基类继承?

即。而不是

Day -> NSManagedObject
Month -> NSManagedObject
Year -> NSManagedObject

你会有

Day -> MyDateType -> NSManagedObject
Month -> MyDateType -> NSManagedObject
Year -> MyDateType -> NSManagedObject

答案 1 :(得分:2)

你可以在对象中实现不同的计算部分,如@deanWombourne所说。或者您可以在单个计算方法中检查对象类型(类)。这取决于你在哪里放置这种方法,你比我们更了解你的代码。也许你可以创造例如。计算器类和那里的计算方法。

答案 2 :(得分:0)

两种选择,C方式:

id doYourThing(id arg) {
   //50 lines of code on the screen
   //50 lines of code on the ...
   return anAnswer;
}

静态方法方式:

@interface AnAppropriateClass : NSSomething 
+ (id) doYourThing: (id) arg;
@end

@implementation AnAppropriateClass 
+ (id) doYourThing: (id) arg {
    //50 lines of code on the screen
    //50 lines of code on the ...
    return anAnswer;
}
@end

这两个都是

  1. 比使用实例方法更快
  2. 制作较小的二进制文件
  3. 具有较小的运行时内存占用