alloc/init 以及实例变量的设置

发布于 2024-08-13 09:40:38 字数 356 浏览 5 评论 0原文

据我了解,除了分配内存之外,alloc还将所有实例变量(除了isa变量)设置为零或为零的等效类型,例如 nilNULL0.0。

但我最近阅读了以下有关 init 的内容:

初始化设置实例 对象的变量合理 和有用的初始值。

我对“合理且有用的初始值”的含义有点困惑......

如果 alloc 已将值设置为零,则 init 是否会更改这些值以任何方式?

It is my understanding that, in addition to allocating memory, alloc sets all instance variables (with the exception of the isa variable) to zero or to the equivalent type for zero, such as nil, NULL, and 0.0.

But I recently read the following about init:

Initialization sets the instance
variables of an object to reasonable
and useful initial values.

I'm a bit confused as to what "reasonable and useful initial values" means....

If alloc has already set the values to zero, is init altering these values in any way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

快乐很简单 2024-08-20 09:40:38

如果 alloc 已将值设置为零,init 是否会以任何方式更改这些值?

当然。

例如,您可能有一个表示矩形的对象,其中 ivar 表示宽度和高度;在 init 中,您可以将这些 ivars 初始化为一些合理的默认值,例如 300x200。

这就是他们所谈论的一切。

如果您询问 NSObject 的 -init 方法是否将子类的 ivars 的值初始化为某些非零值,答案当然是否定的。

If alloc has already set the values to zero, is init altering these values in any way?

Sure.

For example, you may have an object that represents a rectangle with ivars to represent width and height; in init you may initialize these ivars to some sane default, say 300x200.

That's all they're talking about.

If you're asking whether NSObject's -init method is initializing the values of your subclass's ivars to some non-zero values, the answer of course is no.

如若梦似彩虹 2024-08-20 09:40:38

是的,这是完全可能的。例如,数据结构可能具有需要分配和初始化动态内存的成员变量。 alloc 调用将为成员变量保留空间,init 调用将使这些值变得有用(例如,子分配和初始化)。

allocinit 是分开的,因为一个类可以有多个 init 例程,它们以不同的方式初始化对象。

您还可以通过调用new同时调用allocinit。因此以下两行是等效的:

[[NSObject alloc] init];
[NSObject new];

Yes, it is entirely possible. For example, a data structure may have member variables that require dynamic memory be allocated and initialized as well. The alloc call will reserve the space for the member variables and the init call will make those values useful (e.g., suballocation & initialization).

alloc and init are separate because you can have multiple init routines for a class that initialize an object in differing ways.

You can also call alloc and init at the same time by calling new. Thus the following two lines are equivalent:

[[NSObject alloc] init];
[NSObject new];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文