如何弱化iOS应用委托方法的链接?

时间:2015-10-11 17:46:54

标签: ios objective-c cocoa cocoa-touch

我想在iOS 9应用程序中添加对iOS 9中引入的新3D Touch Quick Actions的支持。我知道我需要使用弱链接方法,但问题是我不知道为app委托方法执行此操作的正确语法。

要处理快速操作,我的应用代理需要实施新的application:performActionForShortcutItem:completionHandler:方法,但是这种方法的语法是什么?这种方法是以弱连接的方式实现的,这种方式在iOS 8上不会崩溃?我到目前为止:

// iOS 9 only...
if ([UIApplicationDelegate instancesRespondToSelector:
     @selector(application:performActionForShortcutItem:completionHandler:)]) {

    // How do I access the method's shortcutItem and completionHandler arguments from here?
}

你可以看到我使用的是Objective-C而不是Swift。

1 个答案:

答案 0 :(得分:2)

像这样的个别方法并非真正受弱链接影响;感谢ObjC的运行时调度方法,respondsToSelector:(或instancesRespondToSelector:)是测试您在发送之前发送消息的正确方法。弱链接仅适用于整个类(和C函数)。

在这种情况下,对于框架调用的任何方法,它只是在iOS 9之前的任何方法上都不会被调用。如果你实现了这个方法,你的代码将会从不运行,所以它永远不会导致问题。除了二进制大小略有增加之外,您可以同样在应用代理中实现- (void)applicationWillDrunkDialYourEx:(UIApplication *)application而不会产生任何后果。

所以你可以继续实施它。