gpt4 book ai didi

cocoa - 使用 "Deployment Target"重命名方法和 Cocoa Touch 中的弱链接

转载 作者:行者123 更新时间:2023-12-03 17:00:11 25 4
gpt4 key购买 nike

在 iPhone SDK 3.2 中,[CLLocation getDistanceFrom:] 已重命名为 [CLLocation distanceFromLocation:]。我的项目是使用 3.2 作为基础 SDK 和 3.0 的“部署目标”进行编译的,这意味着仅在 3.2 中可用的框架是弱链接的,因此我的应用程序仍然可以在 3.0 上运行。

如果我将通话更改为使用新名称 distanceFromLocation:,运行 3.0 或 3.1 的设备上会发生什么情况?我假设该方法调用将失败并且将返回0.0(因为Cocoa返回无法识别的选择器的默认值)。

如果我的假设是正确的,这意味着我现在必须忍受编译器警告,直到我不再想以 3.0 为目标。

最佳答案

If I change my calls to use the new name distanceFromLocation:, what will happen on devices running 3.0 or 3.1? I assume that the method call will fail and 0.0 will be returned (as Cocoa returns the default for unrecognized selectors).

不,您正在考虑向 nil 发送消息。向无法识别选择器的对象发送消息将导致异常。如果您没有捕获该异常,您的应用程序将会崩溃。用户不会喜欢这样,Apple 可能会因此拒绝您的应用。

解决方案是测试该位置是否响应新的选择器:

if ([here respondsToSelector:@selector(distanceFromLocation:)])
distance = [here distanceFromLocation:there];
else if ([here respondsToSelector:@selector(getDistanceFrom:)])
distance = [here getDistanceFrom:there];

顺便说一下,这实际上与链接没有任何关系。如果我们谈论的是一个已更改名称的类,那么它就会更改名称,但动态消息分派(dispatch)意味着 Objective-C“方法调用”(更准确地说,到对象的消息)在编译或链接时不绑定(bind)。

关于cocoa - 使用 "Deployment Target"重命名方法和 Cocoa Touch 中的弱链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3015453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com