gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:12:54 25 4
gpt4 key购买 nike

我正在尝试自学 Objective-C,我使用的网站正在讨论空对象。

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

它没有那么有用,这告诉我,它可能有一些用途。

有吗?是否存在某个场景中某人需要一个空对象?

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

最佳答案

请注意,空对象可以在任何编程语言中使用,并且与 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];

未参与设计此类的开发人员可能不知道门是房屋的重要组成部分,并且根本不分配它,这可能会导致意外的行为。因此,看到有一个专用的初始化器或多或少是方便的。

通常您会结合两者。例如,如果房子需要由一扇门组成,那么在初始化程序中将一扇门分配给房子并干燥代码几乎是不可避免且非常方便的(否则你总是会重复代码行)。然后可以将其他可选属性分配给您提到的“空类”。

关于objective-c - 创建一个空对象有什么用吗? ( Objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32463823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com