【问题标题】:Declaring An Objective-C Object Without Alloc, Init, Or New声明一个没有 Alloc、Init 或 New 的 Objective-C 对象
【发布时间】:2017-05-11 13:51:15
【问题描述】:

有时我看到对象指针已设置,但没有分配或初始化它们。例如:

MyObject *object;

然后它会被赋值给一个值。我的猜测是这样更有效,或者是在需要之前不使用内存的好方法?

我找到了类似this one 的答案,但我没有太多 C++ 或 Java 的背景知识。如果那里有任何 Redditers,或者有人可以像我五岁一样解释,我会喜欢的。

【问题讨论】:

  • 您链接的问题是针对 C++ 的,而不是针对 Objective-C 的。讨论并不完全适用于 Objective-C。
  • 好的。我想你知道来自 C、C++ 的引用。您只是要将一个对象的引用分配给另一个对象。在 iOS 中,当且仅当至少一个引用可用时,对象才会在内存中。所以创建一个新的引用会将对象放入内存,直到你不释放它
  • 您的问题的标题存在问题,这在尝试理解这一点时很重要。您引用的行 根本不是“声明一个 Objective-C 对象”。它正在定义一个变量,如果创建一个对象并将其地址分配给指针,则该变量可能指向这样的对象。 (非正式地,我们经常把指针当成对象来讨论,但它会让学习该主题的人感到困惑。)

标签: objective-c pointers object


【解决方案1】:
MyObject *object;

声明一个对象的引用。它根本不声明对象,也不分配任何内存。

您可以轻松地将已经存在的引用复制到该引用,无需先分配任何内容:

object = [myThingamabob giveMeAnObject];

这与在 C 中执行此操作相同:

int main(int argc, char *argv[]) {
  char *dogstring;
  dogstring = argv[0];
}

在 ELI5 术语中:

假设您有一个名片夹。它是空的。在放入他人给您的卡片之前,您不必在其中放入空白卡片。您可以直接将收到的卡片放入盒子中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    相关资源
    最近更新 更多