Tag: Alex Petuschak

Swift 5中的排他性实施

每次我们为变量设置值或从变量读取值或将参数传递给函数时,都会访问内存。 发布模式中排他性强制对Swift项目的影响 Swift 5中的排他性实施可能以两种方式影响现有项目: 如果项目源违反了Swift的排他性规则,并且Debug测试未能执行无效代码,则执行Release二进制文件可能会触发运行时陷阱。 崩溃将产生一条诊断消息,“ 对…的访问重叠,但修改需要排他访问 ”。 源代码级修复通常很简单。 内存访问检查的开销可能会影响Release二进制文件的性能。 在大多数情况下,影响应该很小。 结论 排他性强制仅捕获单线程错误。 对内存的独占访问可带来更可靠的性能,并显着优化: 图书馆 编译器 用户编写的代码 通过在发布版本中启用完全排他性强制实施,Swift 5有助于消除错误和安全性问题,确保二进制兼容性以及启用将来的优化和语言功能。 参考文献 https://swift.org/blog/swift-5-exclusivity/ https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md https://developer.apple.com/videos/play/wwdc2017/402/ 您可以通过Twitter,Linkedin,Facebook和Github与我们联系。

Swift与Objective-C在2019年

Objective-C由Brad Cox和Tom Love于1984年创建,是C的扩展。它在C语言中添加了SmallTalk样式消息传递和对象定向。 Objective-C的比较优势: 与C ++和Objective C ++的互操作性 动态功能,例如方法混乱 更好地支持编写二进制框架。 Objective-C的缺点: 由于Objective-C建立在C之上,因此缺少命名空间 。 Objective-C应用程序中的所有类都应该是全局唯一的。 因此,为了避免冲突,有一个在类名前加前缀的约定。 这就是为什么我们在Foundation Framework中为类提供了‘NS’前缀,在UIKit中为类提供了‘UI’前缀。 显式指针。 在nil对象上发送消息而不会崩溃的能力以及缺乏严格的键入导致了难以跟踪和修复的错误。 该语言在语法上冗长而复杂,但是鉴于它是一种相当古老的语言,因此可以预期。 Swift是一种于2014年发布的年轻语言。它采用现代语法和功能,旨在确保安全性和高性能。 Swift于2015年12月开源。 Swift的比较优势: 由于使用静态类型以及使用可选对象和可选链接,因此Swift更安全。 支持名称空间,清晰的可变性语法,功能模式和简洁的语法。 使用Playgrounds进行交互式开发。 对于新程序员来说,Swift更容易学习。Apple的官方语言指南是一个很好的资源。 Swift表现出色,正在服务器端应用程序中找到自己的位置。 克里斯·贝利 ( Chris Bailey)在Realm Academy上的一次演讲中解释了在服务器端使用Swift的优势,他指出了Swift与服务器和云上其他框架相比的优势。 据他介绍,Swift性能卓越,内存占用量低,这使其成为服务器端开发的理想选择。 Swift现已稳定,其ABI已锁定。 Swift标准库代码包含约42.5%的Swift代码。 标准库中使用的不同语言的拆分如下图所示。 此Swift代码可能是开发人员可以用来改进自己的Swift编码的最佳Swift代码。 在本演讲中,它涵盖得很好。 Swift的比较缺点: 编译时间更长。 没有直接使用C ++库的方法。 模块格式的稳定性仍未实现,对于希望将其代码共享为二进制框架的开发人员而言,这是必需的。 结论 Swift现已正式成为ABI的稳定用户,可以被认为是一种成熟的语言。 Swift中的未来更新不会破坏从现在开始在Swift 5中编写的当前代码。 苹果提供了Objective-C和Swift之间的出色互操作性,并且不会在不久的将来放弃对Objective-C的支持。 对于团队来说,最好将其Objective-C代码的一部分迁移到Swift,因为它现在是ABI Stable。 如果您正在开发一个二进制框架,我建议您等待Swift实现模块格式稳定性。 另外,如果您要使用C ++和Objective-C ++代码库或框架,那么您将需要使用Objective-C和Swift。 […]