博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIDevice
阅读量:4296 次
发布时间:2019-05-27

本文共 2440 字,大约阅读时间需要 8 分钟。

UIDevice

UIDevice 类的单例描述了当前设备的一些设备信息,如设备名称、设备类型、系统名及版本号、电池状态、进近传感器状态、设备姿态等信息。

可以通过注册如下通知,来获取相关变化。

  • UIDeviceOrientationDidChangeNotification
  • UIDeviceBatteryStateDidChangeNotification
  • UIDeviceBatteryLevelDidChangeNotification
  • UIDeviceProximityStateDidChangeNotification

identifierForVendor

@property(nullable, nonatomic,readonly,strong) NSUUID *identifierForVendor API_AVAILABLE(ios(6.0));

该属性用来标志同一个设备上供应商提供的所有应用,即在一个设备上同一个供应商提供的不同的应用的该属性的值是相同的。

通常这个值是 App Store 提供的,但是如果应用是企业自己发布的或者是测试版本的,那么该属性值是基于 Bundle ID 计算得到的。计算时,iOS 6 是计算 ID 的前两个字段,iOS 7 之后,是计算除去 ID 最后一个字段的剩余所有字段。如果只有一个字段,那么则基于该字段进行计算。

所以对于企业级应用而言,该属性在同一个设备上的同一个供应商提供的应用中可能是不同的。

当然,在不同的设备上,应用中读取的该属性总是不同的,和供应商是否为同一个无关。

generatesDeviceOrientationNotifications

该属性用来判断当前应用中是否可以发送设备姿态变化通知,如果设备本身禁止了屏幕旋转,那么该值无论真假,UIDeviceOrientationDidChangeNotification 通知都不会发出。而如果设备是允许旋转的,那么该值为假时,该通知同样不会发出。

@property(nonatomic,readonly,getter=isGeneratingDeviceOrientationNotifications) BOOL generatesDeviceOrientationNotifications API_UNAVAILABLE(tvos);

如果需要根据某些条件来决定是否发送设备姿态变化通知,可以使用下面的两个方法来修改上面的属性值,使用时应成对使用,有始有终。

- (void)beginGeneratingDeviceOrientationNotifications API_UNAVAILABLE(tvos);      // nestable- (void)endGeneratingDeviceOrientationNotifications API_UNAVAILABLE(tvos);

同样的,如果要获取设备的姿态信息,如下写法更加保险。

UIDevice *device = [UIDevice currentDevice];    if (!device.isGeneratingDeviceOrientationNotifications) {    [device beginGeneratingDeviceOrientationNotifications];}NSLog(@"%ld",device.orientation);

如果确定不再需要接收设备姿态通知,那么可以调用下面的方法,调用后,设备 orientation 的值为 UIDeviceOrientationUnknown

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

endGeneratingDeviceOrientationNotifications 方法的调用并没有影响其他应用对相关通知的接收,并且 generatesDeviceOrientationNotifications 的值也不是立即就变为 NO 了,说明这个修改是异步的,且重启应用后,该值仍为 YES

根据官方文档的描述,该方法调用后,即告知系统可以停止加速计并断电,由此猜测 generatesDeviceOrientationNotifications 的初始值是由加速计的状态来确定的。

虽然在 endGeneratingDeviceOrientationNotifications 方法调用后,设备旋转并不触发监听事件,但是在应用进入后台或由后台进入前台时,仍能够监听到相应的 UIDeviceOrientationDidChangeNotification 通知,并触发相关方法。

由此猜测,endGeneratingDeviceOrientationNotifications 方法并没有修改通知中心,或许系统维护了一个表,用来记录受加速计状态变化影响的应用。

beginGeneratingDeviceOrientationNotificationsendGeneratingDeviceOrientationNotifications 都是对这个标记的影响,那么 generatesDeviceOrientationNotifications 的异步变化也可以解释的通了。

除此之外,DCDeviceCheck 框架中的 DCDevice 类同样可以获取当前设备,但是其并不是用来描述当前设备的相关属性,而是提供了一个方法来生成一个 token 值来标记当前设备,该值可以作为一个唯一标志传递到应用的后台,从而后台可以同苹果的服务器进行交互,设置或获取一个 2 位的状态值。通过这个值,商家可以判断该设备的使用者的相关权益。

详细可以参考:

转载地址:http://jvdws.baihongyu.com/

你可能感兴趣的文章
C语言实型数据(浮点数)
查看>>
C语言数据类型转换
查看>>
C语言指针变量作为函数参数
查看>>
C语言局部变量和全局变量
查看>>
C语言变量的存储类别
查看>>
C语言结构体指针变量作函数参数
查看>>
C语言动态存储分配
查看>>
MSP430中断原理分析
查看>>
display几点解释
查看>>
详解SPI中的极性CPOL和相位CPHA
查看>>
各类总线传输速率
查看>>
有关分散加载文件scatter的理解 关键是加载域 加载地址与执行域地址的 处理
查看>>
RO,RW,ZI 和scatter file详解(转载)
查看>>
Coap协议学习笔记
查看>>
谈"http get和post的区别"
查看>>
Java虚拟机学习笔记(一)——JVM运行时数据区和常见内存错误
查看>>
Java浅拷贝和深拷贝
查看>>
HTTP协议基础(HTTP 1.1)
查看>>
从字节码看Java中for-each循环(增强for循环)实现原理
查看>>
Java时间类记录
查看>>