Objective-C中的星号用法:相关问题

Reb*_*gan 2 cocoa objective-c objective-c-runtime

我有几个与此相关的问题:在Objective-C中使用星号

NSArray数组; 在本地范围内,将是在堆栈上"分配"的对象.NSArray*数组; 表示由大量内存支持的对象,通常从堆中分配.

你怎么知道什么时候在堆栈和堆上分配了什么?堆栈上的所有局部变量都是堆上的指针吗?

因为您没有取消引用指向该对象的指针,并且指向该对象的指针在方法实现本身中是至关重要的.当你说...

呵呵

Pet*_*sey 9

你怎么知道什么时候在堆栈和堆上分配了什么?堆栈上是否有所有局部变量......

没关系.堆栈和堆是实现细节; C和Objective-C语言不了解它们,你通常没有任何理由去关心堆栈或堆上的东西.

在Mac OS X上,局部变量位于堆栈中.但是,对于几乎所有目的而言,这并不重要.别担心.

......并且都是堆上的指针?

不.指针是内存地址; 就这样.

指针变量可以是任何其他变量的任何位置,也就是说,任何地方(根据您不必关心的实现定义的限制,如上所述).

有关更多信息,请参阅我的指针教程

因为您没有取消引用指向该对象的指针,并且指向该对象的指针在方法实现本身中是至关重要的.当你说...

呵呵

指针是内存地址.因此,它指的是该地址的内存.取消引用指针正在访问该内存.

你永远不会直接访问Cocoa对象占用的内存.您只发送消息,要么提出问题要么告诉它要做的事情.因此,您永远不会取消引用指针.

"...指向对象的指针在方法实现本身中是至关重要的."意味着对象在其方法实现中将需要自己的指针.只能向指向对象的指针发送消息(这个细节通常被省略).如果以某种方式将其关闭,则消息的接收者(即您发送消息的对象)将没有自己的指针.

假设可以向解除引用的对象发送消息.规范仍然是将消息发送到指向对象的指针,因此很可能,对象仍然需要指向自身的指针 - 这使得对取消引用的对象发送消息的假设能力无用.

由于它没用,他们完全把它留了下来.该对象将需要自己的指针(指针对于对象的方法实现至关重要),因此您只能向其指针发送消息.