class 包装器和 Java 与 Objective-C 中的单例有什么区别?

What is the difference between a class wrapper and Java, and a singleton in Objective-C?

我经常听到 "Class Wrapper" 这个词,我很好奇它是什么。我在这个网站上阅读了关于它们的解释,它们基本上听起来就像一个单身人士 Objective-C。我的两个问题是: 1. class 包装器中的单例有什么区别? 2. class 包装器曾经在 iOS 项目中使用过,还是我们在 iOS 世界中更经常使用单例?

单例和class包装器是两个不同的概念。单例是指 class 其唯一作用是拥有一个实例,因此得名。假设您想构建一个地址簿并在其中存储多个联系人,如果您的应用程序的目的只是跟踪联系人,那么在您的应用程序中只有一个地址簿实例而不是创建多个地址簿是有意义的单个地址簿。

在 Obj-C class 中,包装器形成了桥接从 C 语言继承的原始数据类型并为它们提供对象表示的概念。您给出了浮点数据类型的示例。在数字的情况下,基础框架提供抽象 NSNumber class 到 'wrap' 围绕原始数据类型,如 float 或 int,并为您提供对象表示。从那里您可以将它们存储在数组或字典中,或者将它们作为普通对象处理(发送消息、扩展等)。通用 class 包装器的另一个很好的例子是 NSValue class,它允许您为 CGPoint 或 CGRect 创建对象表示,它们在 iOS.

中广泛使用

我认为您对其中一个实体感到困惑,它们一点也不相似(除了是软件工程的一部分...)。

单例是单个对象(您喜欢的任何 class),可以通过您喜欢的任何代码从整个项目的任何地方访问。它是 space 中的一个点,可以从 space 中的任何其他点引用。

A "Wrapper Class" 是一个 class 包裹了另一个 class(或原语)。假设您想将一个 int 传递给一个函数或方法,该方法会修改该 int 并且您希望调用对象看到更改。由于 int 是按值而不是按引用传递的(默认情况下),因此调用者将忽略您在被调用函数中对该 int 所做的任何更改。所以调用者看不到 int 值的变化。现在如果你创建一个 Integer 对象并让它包装一个 int 你现在可以通过引用函数或方法传递那个 Integer 对象,修改 Integer 对象并将修改后的值取回调用函数。 Wrapper Class 将一个对象(或原语)包装到另一个对象中以赋予它不同的功能。