新手在这里试图了解继承。如果我初始化一个具有多个属性的新对象,并且我希望其他类帮助为这些属性赋值,那么我是否需要创建其他类的实例?可视化:
-(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是什么,我是否需要创建这些类方法实例方法并初始化每个对象?还有另一种方法可以解决这个问题吗?提前感谢您的帮助。
答案 0 :(得分:6)
换句话说,假设A,B和C类需要知道对象A是什么 是
否强>
您可以简单地从ClassA / B / C等调用方法。但返回类型必须与相应的property
匹配。
我们property1
是NSString
种类,那么您的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是否需要这些属性才能运行?如果确实如此,那么您的代码是正确的,如果它没有,则初始化程序会提供太多信息并使其不太可重复使用。
尝试用真实(相当抽象)的例子重新思考你的疑问。你最终可能会自己理解它。