2

我不确定以下代码在 appdelegate 的 didFinishLaunchingWithOptions 中如何工作?

[[UIApplication sharedApplication] addObserver: self forKeyPath: @"idleTimerDisabled" options: NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context: nil];

它与“idleTimerDisabled”到底有什么关系?

谢谢

4

1 回答 1

1

苹果文档idleTimerDisabled

此属性的默认值为 NO。当大多数应用程序在短时间内没有用户输入触摸时,系统会将设备置于屏幕变暗的“睡眠”状态。这样做是为了节省电量。但是,没有用户输入的应用程序除了加速度计——例如游戏——可以通过将此属性设置为 YES 来禁用“空闲计时器”来避免系统睡眠。

通过分配true这个值,当用户没有进行任何操作(触摸、按下、滚动等)时,iOS 不会使屏幕变暗并锁定 iPhone。这方面的例子可以在游戏与其他普通应用程序中找到。与其他应用程序相比,游戏使您的 iPhone 保持清醒的时间要长得多。


For
[[UIApplication sharedApplication] addObserver: forKeyPath: options: context:]
This 是一个Objective-c 键值观察aka KVO
您的代码的意思是,当有人UIApplication.sharedApplication.idleTimerDisabled使用任意值分配或更改时,true或者false在这种情况下,您希望收到有关分配或[self observeValueForKeyPath: ofObject: change: context:]方法签名更改的调用。

该选项NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew意味着,您希望在更改字典中接收有关更改的旧值新值的更多信息,您可以稍后在观察方法中访问这些信息。

有关 KVO 的更多信息,请查看 NSHipster这篇文章

AppCoda 对此也有很好的解释


结论
您的代码行的意思是,您希望收到有关 KVO 观察方法中的属性更改的通知,并且您希望通过更改字典UIApplication.shared.idleTimerDisabled访问旧值新值。

于 2019-07-17T16:29:02.933 回答