objective-c - Objective-C 中的星号用法 : related questions

标签 objective-c cocoa objective-c-runtime

我有几个与此相关的问题:Asterisk usage in Objective-C

NSArray array; in a local scope would be an object "allocated" on the stack. NSArray *array; indicates an object backed by a hunk of memory, typically allocated from the heap.

你如何知道什么时候在堆栈和堆上分配了某些东西?所有局部变量都在栈上,所有指针都在堆上吗?

Because you aren't dereferencing the pointer to the object and that pointer to the object is critical within the method implementation itself. When you say...

呵呵

最佳答案

How do you know when something is allocated on the stack and on the heap? Are all local variables on the stack …

没关系。栈和堆是实现细节; C 和 Objective-C 语言不了解它们,并且您通常没有任何理由关心某些东西是在堆栈上还是在堆上。

在 Mac OS X 上,局部变量位于堆栈上。但是,对于几乎所有目的来说,这都没有什么后果。别担心。

… and are all pointers on the heap?

没有。指针是内存地址;仅此而已。

指针变量可以位于任何其他变量可以位于的任何位置,也就是说,可以位于任何位置(受实现定义的限制的限制,您无需关心,如上所述)。

参见my pointer tutorial了解更多信息。

Because you aren't dereferencing the pointer to the object and that pointer to the object is critical within the method implementation itself. When you say...

呵呵

指针是一个内存地址。因此,它指的是该地址处的内存。取消引用指针就是访问该内存。

你永远不会直接访问 Cocoa 对象占用的内存。您只向它发送消息,询问它问题或告诉它做某事。因此,您永远不会取消引用指针。

“……指向对象的指针在方法实现本身中至关重要。”意味着该对象在其方法实现中需要自己的指针。只能将消息发送到指向对象的指针(通常会忽略此细节)。如果您以某种方式实现了这一点,消息的接收者(即您发送消息的对象)将不会有自己的指针。

假设可以向取消引用的对象发送消息。标准仍然是向指向对象的指针发送消息,因此该对象很可能仍然需要该指向自身的指针,这使得向取消引用的对象发送消息的假设能力变得毫无用处。

由于它没有用,所以他们完全忽略了它。该对象需要自己的指针(该指针对于对象的方法实现至关重要),因此您只能向其指针发送消息。

关于objective-c - Objective-C 中的星号用法 : related questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2054608/

相关文章:

ios - 在iOS 8中通过Facebook上的深层链接共享图像和文本

objective-c - 为什么我看到一个 ARC 问题说我确实声明了一个带有特定选择器的方法?

iphone - 核心数据、KVO 和 NSInternalInconsistencyException

objective-c - 如何将图像编码为字符串格式?

xcode - Cocoa 框架的内部链接

ios - 在 iPhone 上发送短信

objective-c - 计算数字数组的可能排列

ios - 在运行时添加具有新协议(protocol)的新类获得不同的行为

objective-c - 获取调用方法的对象

objective-c - 在 Objective-C 中获取方法参数的类