Aar*_*ron 1 iphone location objective-c cllocationmanager ios
假设我有一个采用CLLocationCoordinate2D的方法.我无法将nil直接传递给代码中的nil; 编译器抱怨.但是,以下编译.那么在运行时会发生什么?
CLLocation* loc = nil;
[self passMeCoordinates:loc.coordinate];
Run Code Online (Sandbox Code Playgroud)
这是个有趣的问题.我假设你的早期代码是:
[self passMeCoordinates:nil];
Run Code Online (Sandbox Code Playgroud)
编译器抱怨这个,因为CLLocationCoordinate2D不是一个对象.这是一个C风格的结构.因此,您无法传递期望结构的对象/指针(nil).(它们的大小不一样等)
如果我稍微将你的代码解释为:
CLLocation* loc = nil;
CLLocationCoordinate2D coord = loc.coordinate;
[self passMeCoordinates:coord];
Run Code Online (Sandbox Code Playgroud)
问题归结为"有什么价值coord".正如您所知,Objective-C中的规则是,如果您向nil发送消息(就像我们在这里做的那样 - loc.coordinate相当于[loc坐标]),那么你会回到0.但是如果我们'期待一个结构?正如我刚才提到的,它与整数的大小不同.好吧,事实证明结果取决于你正在使用的编译器:
LLVM 3.0+(Xcode 4.2+):返回全零,所以它相当于(0,0)的坐标:我可以依靠nil UIView返回CGRectZero作为其框架吗?
LLVM早期/ GCC:一个结构可以填充垃圾/未定义的内容,因此它可以是任何东西.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |