iOS 开发交流

Foundation Release Notes For iOS

2018-12-03  本文已影响19人  Mr__Peng__
Overview

macOS 10.14iOS 12watchOS 5tvOS 12中的基础包括新功能,API更改和弃用。

Secure Data Archival and Unarchival

NSKeyedArchiverNSKeyedUnarchiver类具有新的初始化器和辅助方法,使您可以更轻松地为存档和取消存档启用安全编码。 每个初始化程序或帮助程序方法都会替换现在不推荐使用的相应成员。

Secure Value Transformer

NSSecureUnarchiveFromDataTransformerValueTransformer的新子类。它使用NSKeyedArchiverNSKeyedUnarchiver通过启用requiresSecureCoding来归档和取消归档数据。
NSData``取消归档时,NSSecureUnarchiveFromDataTransformer使用其的allowedTopLevelClasses列表通过调用新的unarchivedObject(ofClasses:from :)方法来解码对象。默认情况下,此列表包括所有属性列表类型-NSArrayNSDictionaryNSStringNSNumberNSDateNSDataNSNull以及NSURLNSUUID。 归档到NSData时,此转换器调用新的archivedData(withRootObject:requiresSecureCoding :)方法并启用requiresSecureCoding。 要转换上面列出的默认值以外的类型的顶级值,请继承NSSecureUnarchiveFromDataTransformer`。

NSSecureCoding Conformance

NSPointerFunctionsNSMapTableNSHashTable类现在支持与NSSecureCoding协议的有限一致性。 只要使用以下个性和内存类型配置它们,就可以安全地编码消耗指针功能的集合:

重要
弱值不会像预期的那样往返,除非你在unarchival期间在其他地方强烈引用它们。

Macro for Closed Enumerations

NS_CLOSED_ENUM是用于声明枚举的新宏。 您仅将其用于保证永远不会获得其他案例的枚举。 通常,您确定不会出现新案例,因为您正在建模的枚举代表数学上完整的集合。ComparisonResult现在采用NS_CLOSED_ENUM宏。 它不会获得额外的情况。

重要
将枚举标记为已关闭后,添加新值将是二进制和源不兼容的更改。 如果您对将来获得私有或其他公共案例的枚举有任何疑问,请改用NS_ENUM宏。

有关NS_CLOSED_ENUM的信息,并在其与其他宏之间进行选择以分组常量

UserDefaults

UserDefaults有几个错误修复和改进:

On-Demand Resources

遇到某些类型的内部错误时,NSBundleResourceRequest不再抛出异常。 相反,它在beginAccessingResources(completionHandler :)方法的完成处理程序的error参数中返回一个错误。 除NSUserCancelledError和网络相关错误外,该错误可能还包括NSFileReadUnknownErrorNSXPCConnectionInterrupted错误。
如果您的应用在使用NSBundleResourceRequest时遇到错误,请再次请求资源或向用户显示提示再次尝试。

Thread Safety of Bundles

Bundle上的principalClass属性包括新的线程安全性改进。 如果其他线程正在加载包的过程中,则访问属性块。 此操作允许属性在所有情况下都返回正确的值。

CFMessagePort

CFMessagePortSetName(_:_ :)函数在macOS 10.14iOS 12watchOS 5tvOS 12上或之后链接的应用程序中不执行任何操作。此API将在以后的版本中弃用。
在早期版本的macOSiOSwatchOStvOS上链接的应用程序中,如果消息端口已经通过CFMessagePortSetDispatchQueue(_:_:已经拥有与其自身关联的调度队列),则CFMessagePortSetName(_:_ :)函数不会执行任何操作。 )功能。 以前,此模式将导致未定义的行为。
在所有情况下,如果需要更改CFMessagePort的名称,请使用CFMessagePortCreateLocal(_:_:_:_:_ :)CFMessagePortCreateRemote(_:_ :)

上一篇 下一篇

猜你喜欢

热点阅读