作为UIApplication单例对象的方法 openURL方法的变化

作为UIApplication单例对象的方法 openURL: 在iOS开发中经常用来实现在当前应用打开外部链接的需求比如跳转到其他应用,跳转应用隐私设置界面;还有相关API canOpenURL: 进行跳转前判断.而这个古老(iOS2时出现)的 openURL 方法将被现今iOS10出现的新API openURL:options:completionHandler: 所替代.

虽然关于该API的官方文档补充完全,但所提供的信息足够能让开发者简单了解使用最新API打开外部链接的API究有何异同.

新API的官方描述

首先来看官方文档对iOS10的 What’s New in iOS UIKit部分对新API的描述

The new UIApplication method openURL:options:completionHandler:, which is executed asynchronously and calls the specified completion handler on the main queue (this method replaces openURL:).

这段话清楚地指明了新API的两个特点:异步执行open操作和主线程执行回调.

新API的代码描述

接下来再看看具体的接口代码,可以看出判断链接打开是否成功的方式也从以前的根据 openURL 调用return的布尔值变成了查询completion的success参数;

// old- (BOOL)openURL:(NSURL*)url // new- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion

并且额外地提供了一个用来URL处理的options字典参数,没有限定值时就要传空字典,就像下方代码一样调用.

[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];

options目前可传入参数Key在UIApplication头文件只有一个:UIApplicationOpenURLOptionUniversalLinksOnly,其对应的Value为布尔值,默认为False.如该Key对应的Value为True,那么打开所传入的Universal Link时,只允许通过这个Link所代表的iOS应用跳转的方式打开这个链接,否则就会返回success为false,也就是说只有安装了Link所对应的App的情况下才能打开这个Universal Link,而不是通过启动Safari方式打开这个Link的代表的网站.
[application openURL:URL options:@{UIApplicationOpenURLOptionUniversalLinksOnly : @YES} completionHandler:nil];
时间: 2024-09-27 20:19:19

作为UIApplication单例对象的方法 openURL方法的变化的相关文章

scala入门-08 apply方法和单例对象的使用

首先 在scala下的 org.scala.clazz下创建UsageOfApply.scala 我们做过Java开发都知道 main方法中的对象都是静态的,而scala object对象的方法都是静态方法 接下来 我们看下 apply是如何使用的 当 val applyTest = new ApplyTest() 会导致apply方法的调用并返回该方法调用的值,也就是ApplyTest的实例化对象 Class中也可以由apply方法,其使用方法如下所示: 由于 object中的方法和属性都是静

android里单例对象和某些数据被释放的问题

接触正式的android开发已经有一段时间了,项目的第一个版本终于快完成了.有一次自己在测试的时候,把自己的android项目切到后台,同时打开了几个应用之后重新切回到自己的app,发现报错了.经过排查,发现是自己的单例对象中的数据被释放掉了,也就是int变量的值 变成了0,string变量的值变成了null. 我的单例一开始是这样的(举例); public class UserInfo { private static UserInfo userInfo = null; private int

scala学习手记14 - 单例对象

java中的单例模式都很熟悉了:简单地说就是一个类只能有一个实例.在scala中创建单例对象非常简单,创建类时使用object关键字替换class即可.因为单例类无法初始化,所以不能向它的主构造函数传递参数. 下面是一个单例的示例: class Marker(val color: String) { println("Creating " + this) override def toString(): String = "marker color " + colo

iOS:创建单例对象的两种方式

单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClassManager*)sharedManager { @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全 { if(singleManager == nil) { singleManager = [[SingleClassManager alloc]init]; } } return

Scala的单例对象

通常,一个类对应一个伴生对象,其方法就跟Java中的静态方法一样,举例:BigInt类的BigInt伴生对象有一个生成指定位数的随机素数的方法probablePrime,在REPL中运行下列代码: object HelloWorld{ def main(args:Array[String]){ for( i<- 1 to 10){ println(BigInt.probablePrime(10,scala.util.Random)); } } } 得到的结果如下: 523 977 839 911

atitit.guice3&#160;绑定方式打总结生成非单例对象toInstance&#160;toProvider区别&#160;v2&#160;pb29

atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29 1. 三 绑定方式的介绍1 2. To接口,链式绑定,用的最多的1 3. toConstructor1 4. toInstance生成的都是单例对象的...3 5. toProvider生成非单例对象3 5.2. 注解(Annotations)绑定3 5.3. 实例绑定(str,int绑定)4 5.4. 无目标绑定4 6. 参考5 重大的描述 1. 三 绑定方式的介绍 1. 在

单例对象

在开发中经常需要使用单例对象.今天主要说的是单例宏 首先先简单介绍一下 1.单例设计模式(Singleton) 1> 什么: 它可以保证某个类创建出来的对象永远只有1个 2> 作用(为什么要用) * 节省内存开销 * 如果有一些数据, 整个程序中都用得上, 只需要使用同一份资源(保证大家访问的数据是相同的,一致的) * 一般来说, 工具类设计为单例模式比较合适 3> 怎么实现 * MRC(非ARC) * ARC 代码采用的是mrc的环境 单独创建一个.h文件 例如SingleTon.h

【Scala】单例对象与伴生对象

Scala的单例对象 Scala不能定义静态成员,而是代之定义单例对象(singleton object).以object关键字定义. 对象定义了某个类的单个实例,包含了你想要的特性: object Accounts{ private var lastNumber = 0 def newUniqueNumber() = { lastNumber += 1; lastNumber} } 当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueNumber()即可. 对象的构造

iOS开发中单例对象的标准创建方法

//标准的单例写法 //以创建歌曲的管理者为例进行创建.+(instancetype) sharedQYSongManager { static QYSongsManager *songManager =nil; //采用GDC标准单例实现方法 static dispatch_once_t onceToken; //Executes a block object once and only once for the lifetime of an application. dispatch_onc