【问题标题】:Using Pointers in Objective-C?在 Objective-C 中使用指针?
【发布时间】:2012-02-25 17:48:31
【问题描述】:

每当 Apple 创建自己的自定义类时,它通常会创建一个指向对象的指针,而不是实际的对象本身。

例如,而不是做:

Class object

他们经常这样做:

Class *object = [[Class alloc] init];

为什么使用指针而不是将对象放入堆栈中?这是否有一些技术原因,因为我认为这样做没有任何直接的好处。

编辑:如果 Objective-C 不支持堆栈上的对象,他们如何创建任何非指针?我的意思是我见过人们直接使用 NSInteger。

【问题讨论】:

  • 因为它是objective-c 而不是C++
  • NSInteger 是 int 的 typedef,即它是原始类型而不是对象。
  • @UIAdam NSRect 或类似的类呢?它们不是 typedef,但它们仍然是直接创建的(即 NSWindow 的构造函数)
  • NSRect 是一个 C 结构,而不是一个对象。
  • 好吧,回答一切,谢谢。

标签: objective-c memory heap-memory stack-memory


【解决方案1】:

*(指针)指向内存中要保存此对象的位置。另外,这正是objective-c的编写方式。另外,我相信目标 c 不允许您将对象放入堆栈!

【讨论】:

  • 我想他知道指针是什么。他在问为什么要使用它们。
【解决方案2】:

如果对象经常被传递,那么使用指针可能比传递引用更容易。当你知道你正在传递一个指针时,它表明事情可能会被修改,而通过引用传递可能会被忽略,并导致事情在你不希望它们发生变化时发生变化。

【讨论】:

  • Objective-C 中没有引用这种东西,就像没有堆栈对象这种东西一样。
【解决方案3】:

Objective-C 不支持堆栈上的对象。

Mike Ash 的博客 here 上的精彩解释

【讨论】:

  • 块除外,这些块在技术上是objective-c对象,并且在使用局部变量时在堆栈上创建。
【解决方案4】:

Objective-C 的常规用法使对象遍布各处,可以从一百万个不同的地方访问、修改和管理它们。根据定义,堆栈对象只有一个所有者,它们的生命和可用性仅限于产生它们的函数(线程)。这将是 Obj-C 中的一个主要问题,因为要么对象的生命周期不受控制,要么对象的生命周期与应用程序相同(您是否看到这些对象占用了多少内存?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2012-03-08
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多