ios - 为什么我们会在 AVCam 示例代码中获取 AVCaptureSessionInterruptionReasonKey 的地址?

标签 ios objective-c

我正在阅读有关 AVCaptureSession 等的示例代码( AVCam )。我注意到以下行( link to the code ):

// In iOS 9 and later, the userInfo dictionary contains information
// on why the session was interrupted.
if ( &AVCaptureSessionInterruptionReasonKey ) {
   ...
}

代码中的注释是有意义的。但是对我来说没有意义的是为什么我们要获取 AVCaptureSessionInterruptionReasonKey 的地址.它定义如下(在 AVCaptureSection.h 中):
AVF_EXPORT NSString *const AVCaptureSessionInterruptionReasonKey NS_AVAILABLE_IOS(9_0);

如果定义了key,它的地址将如何nil ?如果没有定义这个键,代码永远不会被编译,对吧?有人可以向我解释一下这个 if 语句是如何工作的吗?

最佳答案

AVCaptureSessionInterruptionReasonKey在 iOS 9.0 中添加。这样的if仅当您的应用还支持 iOS 8 或更早版本时才需要声明。

当代码在 iOS 9 或更高版本的设备上运行时,该值将是非 nil 并且 if陈述将是真实的。在装有 iOS 8 或更早版本的设备上,该值为 nilif声明将是错误的。

如果您的应用仅支持 iOS 9 或更高版本,则不需要 if陈述。

阅读 SDK Compatibility Guide在 iOS 文档中了解有关此类检查的更多详细信息。

关于ios - 为什么我们会在 AVCam 示例代码中获取 AVCaptureSessionInterruptionReasonKey 的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876932/

相关文章:

ios - SDK 4.2 中未检测到 NSURLDownload

objective-c - 两个 NSDate 之间发生的特定工作日的计数

ios - 如何使用 Facebook 延迟深度链接功能进行新安装并在将 iOS 应用程序发布到 AppStore 之前对其进行测试?

ios - UIAlertView 委托(delegate)给另一个类

ios - 如何使用 UIPickerView 的结果分配字符串,使用字符串作为 WebView url

ios - 更改 UILabel 的部分文本

ios - socket.io 官方客户端连接问题?

ios - 适用于 ios 应用程序的 api 的 django csrf

iphone - Three20 TTLauncherItem样式

objective-c - 在命令行工具应用程序中更改 Mac 系统代理设置