我想在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。
答案 0 :(得分:2)
像这样的个别方法并非真正受弱链接影响;感谢ObjC的运行时调度方法,respondsToSelector:
(或instancesRespondToSelector:
)是测试您在发送之前发送消息的正确方法。弱链接仅适用于整个类(和C函数)。
在这种情况下,对于框架调用的任何方法,它只是在iOS 9之前的任何方法上都不会被调用。如果你实现了这个方法,你的代码将会从不运行,所以它永远不会导致问题。除了二进制大小略有增加之外,您可以同样在应用代理中实现- (void)applicationWillDrunkDialYourEx:(UIApplication *)application
而不会产生任何后果。
所以你可以继续实施它。