代码之家  ›  专栏  ›  技术社区  ›  Matt Sheppard

重命名了“部署目标”和Cocoa Touch中的弱链接的方法

  •  1
  • Matt Sheppard  · 技术社区  · 14 年前

    [CLLocation getDistanceFrom:] 已重命名为 [CLLocation distanceFromLocation:]

    如果我改用新名字打电话 distanceFromLocation: 假定 方法调用将失败 0.0 将返回(因为Cocoa返回未识别选择器的默认值)。

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   Peter Hosey    14 年前

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

    不,你在考虑给 nil

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

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

    顺便说一句,这真的与链接无关。如果我们讨论的是一个更改了名称的类,那么它就是,但是动态消息调度意味着Objective-C方法调用(更准确地说,对对象的消息)不会在编译或链接时绑定。

    推荐文章