Objective c 创建一个空对象有什么用处吗?(目标-C)

Objective c 创建一个空对象有什么用处吗?(目标-C),objective-c,Objective C,我试图自己学习Objective-C,我使用的网站是关于空对象的 它指出,“由于创建空对象没有那么有用,大多数类实现了更具体的init方法,您可以将这些方法发送到alloc的结果中,以创建带有数据的对象,比如initWithString:消息,用于创建字符串的副本:” 它不是有用的,这告诉我,它可能有一些用途 有吗?是否存在这样一种场景:一个空对象就是某人所需要的 为了减少讨论,我将询问它与objective-C语言的关系(我想象不同的语言,不同的原因)。该语句的思想是您可以使用[MyClass

我试图自己学习Objective-C,我使用的网站是关于空对象的

它指出,
“由于创建空对象没有那么有用,大多数类实现了更具体的init方法,您可以将这些方法发送到alloc的结果中,以创建带有数据的对象,比如initWithString:消息,用于创建字符串的副本:”

它不是有用的,这告诉我,它可能有一些用途

有吗?是否存在这样一种场景:一个空对象就是某人所需要的


为了减少讨论,我将询问它与objective-C语言的关系(我想象不同的语言,不同的原因)。

该语句的思想是您可以使用[MyClass alloc]创建一个“空对象”,然后使用init语句初始化它们。是Objective-C中的一种普遍做法。 一个例子就是你在那句话中的例子

[[NSString alloc]initWithString:@"My Test String"]
其他示例可能是创建UIView:

[[UIView alloc] initWithFrame: CGRect(0,0,100,100)];
创建一个空uiview,然后用框架(0,0100100)初始化它。

作为提示,空对象可以在任何编程语言中使用,并且与Objective-C没有任何关系。但是,我理解为什么要将其标记为Obj-C,因为您需要一个Obj-C特定的答案。 另外,我认为你误解了“空对象”这个术语(或者网站在描述它们的真正含义时有些古怪)。我认为你假设空对象只是一个没有任何方法或属性的对象,事实并非如此。对于空对象,作者可能只是意味着在初始值设定项中没有设置属性

通常情况下,该网站所声称的只是一件方便的事情。通过指定显式初始值设定项,几乎可以强制类的用户使用专用初始值设定项

演示:假设我们有一个名为house的类:

@interface House : NSObject

@property (nonatomic, strong) Door *door; 

-(id)initWithDoor: (Door* )door;

@end
因为房子是由门组成的(没有门房子就没有任何意义),你几乎可以强迫这个类的用户用这样的门初始化房子对象:

Door *door = [[Door alloc] init];
House *house = [[House alloc] initWithDoor: door];
另一种方法是创建一个“空对象”,即只调用
init
,而不使用专用的初始值设定项,然后像这样分配门:

Door *door = [[Door alloc] init];
House *house = [[House alloc] init];
[house setDoor: door];
但是,未参与设计此类的开发人员可能不知道门是房屋的重要组成部分,并且根本不分配它,这可能会导致意外行为。因此,或多或少可以方便地看到有一个专用的初始值设定项


一般来说,两者都有。例如,如果房子需要由门组成,那么在初始值设定项中将门指定给房子并干燥代码几乎是不可避免的,而且非常方便(否则,代码总是重复的)。然后可以将其他可选属性分配给您提到的“空类”

您的网站似乎在使用术语“空对象”来表示在未向
init
new
方法传递任何附加数据的情况下创建的对象

你会问这些东西有什么用途吗

绝对是

最常见的两种可能是:

[NSMutableArray new]
以及:

(或等效的
[[…alloc]init]

以上内容创建新的空可变数组/字典-这是编程中的常见要求


HTH

这一切都取决于类。可能类似于一个表单模型,开始时为空,但随后填充。还有一种情况是,对象可能实现函数,但不实现任何实际状态。例如,网络适配器。不确定这是不是你的意思,或者是一个纯粹的空对象,它只作为自身的一个实例存在,没有单独的功能或状态。哦,我明白了,这实际上更有意义。网站没有扩展,所以我很困惑。我根本没有那样看。谢谢写得很好,谢谢。是的,我最初认为空对象没有任何方法。我很高兴我问了这个问题,所有这些答案都澄清了我的任何误解。@Umed很高兴听到这一点!通常情况下,对简单概念的解释会使它们看起来非常困难。
[NSMutableDictionary new]