何时使用指针,何时不使用指针在Objective-C中。

26

我知道有很多关于指针的问题,尤其是针对Objective-C。但我正在寻找一些更高层次的答案,以帮助我理解Objective-C中的范例。

我听说有些人说,在Objective-C中使用指针是一种经验问题,即某些类要求您使用指针,而另一些则不需要。这是真的吗?除了当您想要明确地将引用变量传递给方法时,还有哪些关于指针在Objective-C中的规则呢?


1
我几乎对除了基本数据类型之外的一切都使用指针。如果是 intNSIntegerCGFloat 或者类似的数据类型 - 我不会使用星号。否则,我就会在变量名前面加星号。虽然可能有人可以更好地解释这个问题...... - Aurum Aquila
1个回答

41

当引用堆上的内容时,总是使用指针。当引用栈上的内容时有时候会使用指针,但通常不需要。

由于 Objective-C 对象始终分配在堆上(除了 Blocks,但这与本讨论无关),因此您总是使用指向 Objective-C 对象的指针。id 和 Class 类型都是实际上是指针。

对于某些基本类型和简单结构体,您不使用指针。NSPoint、NSRange、int、NSUInteger 等通常通过栈访问,通常不需要使用指针。

至于“为什么 Objective-C 中使用 * ”,您可能会发现这个问题很有趣


2
+1 感谢 bbum,非常好的回答。在 Cocoa 框架中工作时,如何知道哪些类型是原始类型。更重要的是,如果错误地使用指针,是否会在编译时捕获错误? - andy
6
在Xcode中,如果你使用cmd+双击的方式点击某个东西,它应该会带你到定义的地方。如果这个定义是像Foo *bar这样的东西,而你再次使用cmd+双击的方式点击Foo,它会带你到那个定义的地方。你很快就会熟悉哪些类型是什么。 - bbum
说得好,bbum。我一直很好奇这个问题,你的解释非常清晰明了!加一! - Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接