Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C辅助方法_Objective C_Inheritance - Fatal编程技术网

Objective c 目标C辅助方法

Objective c 目标C辅助方法,objective-c,inheritance,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...

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

-(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是什么,我是否需要使这些类方法成为实例方法并初始化每个对象?还有别的办法吗?提前感谢您的帮助

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


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

假设
property1
用于种类
NSString
,那么您的
ClassA
方法必须是

-(NSString *)methodClassA{
   ...
   return someStringValue;
}
然后您需要使用:

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

或者您可以通过以下方式使用类方法:

+(NSString *)methodClassA{
   ...
   return someStringValue;
}
并将其用作:

self.property1=[ClassA methodClassA];
对象的初始化代码应该是自包含的,除非它使用的是其他对象拥有的功能,在这种情况下,该对象充当该功能的客户端。也就是说,objectA充当A、B、C的客户机(如代码中所示)

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

总的来说

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

  • 不应允许对象以不可用状态存在,也不应在创建对象时要求非必要信息。objectA是否需要这些属性才能运行?如果是这样,则代码是正确的;如果不是这样,则初始值设定项提供了太多信息,使其不易重用


试着用一个真实的(而不是抽象的)例子来重新思考你的疑问。你可能会自己理解它。

这不是对你问题的回答,但一般来说,你应该确定你的课堂设计目标,使每个人尽可能少地从其他人那里了解。例如,汽车可能知道它需要四个车轮对象,但车轮对象不需要知道汽车的情况。我们在短期内打破这条规则来简化事情,而这条规则在以后会影响联合国。这条规则的主要例外是Cocoa/Foundation类,您的类对它了如指掌。谢谢,这是一个非常有用的解释。
assuming Class A, B, and C need to know what Object A is