【问题标题】:Assigning structures to variables in Objective C [duplicate]在Objective C中为变量分配结构[重复]
【发布时间】:2013-03-30 11:37:42
【问题描述】:

我是 Objective C 的新手,所以这可能是一个非常愚蠢的问题。我正在阅读 iOS 编程书,偶然发现了这段 sn-p 代码:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    CLLocationCoordinate2D loc = [userLocation coordinate]; // returns CLLocationCoordinate2D
    ...
}

我还在学习 Objective C,但 loc 不应该是指针吗?据我了解,您只能直接分配简单的类型,例如 int 和 float。这里CLLocationCoordinate2D 是一个结构。然而这不起作用:

CLLocationCoordinate2D *loc = [userLocation coordinate]; 
// this throws error message
// Initializing 'CLLocationCoordinate2D *' with an expression of incompatible type 'CLLocationCoordinate2D'

那么这里发生了什么,我怎样才能了解更多关于指针的信息。谢谢!

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    结构不是指针!

    它们只是简单的 C 类型数据结构,如 int、float 等。

    【讨论】:

      【解决方案2】:

      这取决于[userLocation coordinate] 的返回类型是什么。如果它返回一个结构,那么您必须将该结构存储在某个地方。在这种情况下,您会将其存储在堆栈中,一旦超出范围,它将被删除。

      如果它返回一个指针,那么该指针将指向存储结构的位置。请记住,结构不是对象,它们只是可以存储组合在一起的多个值的记录。

      【讨论】:

      • 对 - 它返回一个结构,而不是指向结构的指针:@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocationCoordinate2D 坐标
      【解决方案3】:

      您可以分配一个结构。 Objective-C 最终还是 C。

      虽然内存中的对象在内部与结构并没有太大的不同,但您不能直接分配对象,而是引用对象。

      因此,您需要了解 [userLocation 坐标] 真正返回的内容。它可以是结构或指向结构或 id 的指针。因此,接收返回值的本地变量必须是同一类型。

      【讨论】:

      • 谢谢,看来我需要学好C了。
      • 好吧,从一开始我就拒绝。当使用 Obj-C 作为两种语言的新手时,如果对 C 了解得太清楚,可能会让人感到困惑。另一方面,每当你发现奇怪的语法时,答案就在 C 层。 :)
      猜你喜欢
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多