Objective C Helper方法

时间:2013-05-12 04:54:53

标签: objective-c inheritance

新手在这里试图了解继承。如果我初始化一个具有多个属性的新对象,并且我希望其他类帮助为这些属性赋值,那么我是否需要创建其他类的实例?可视化:

-(ObjA *)init{
    self = [super init];
    self.property1 = [method from Class A];
    self.property2 = [method from Class B];
    self.property3 = [method from Class C]; etc...
    return self;
 }

换句话说,假设A,B和C类需要知道对象A是什么,我是否需要创建这些类方法实例方法并初始化每个对象?还有另一种方法可以解决这个问题吗?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

  

换句话说,假设A,B和C类需要知道对象A是什么   是


您可以简单地从ClassA / B / C等调用方法。但返回类型必须与相应的property匹配。

我们property1NSString种类,那么您的ClassA方法必须

-(NSString *)methodClassA{
   ...
   return someStringValue;
}

然后你需要使用:

ClassA *objClassA=[ClassA new];
self.property1=[objClassA methodClassA];

或者你可以通过这种方式去上课:

+(NSString *)methodClassA{
   ...
   return someStringValue;
}

并将其用作:

self.property1=[ClassA methodClassA];

答案 1 :(得分:2)

assuming Class A, B, and C need to know what Object A is

对象的初始化代码应该是自包含的,除非它使用不同对象拥有的功能,在这种情况下,对象充当该功能的客户端。也就是说,objectA充当A,B,C的客户端(如代码所示)。

但这并不意味着A,B,C需要知道(依赖于)objectA。通过这样做,你说他们没有理由独自存在。

一般来说,

  • 每个类或方法都应该有一个封装目的。这使得易于理解,更改和单独测试。它是创建类的常用模式,其唯一目的是封装信息以创建不同的类,但是将它分成三个不同的类是不可思议的(因为,我无法想象这样的一个例子)

  • 不应允许对象存在于不可用状态,在创建对象时也不需要非必要信息。 objectA是否需要这些属性才能运行?如果确实如此,那么您的代码是正确的,如果它没有,则初始化程序会提供太多信息并使其不太可重复使用。

尝试用真实(相当抽象)的例子重新思考你的疑问。你最终可能会自己理解它。