首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

何为非常不确定的行为(并发)设计安全的 API,使用这些 API 时如何确保安全

.NET 中提供了一些线程安全的类型, ConcurrentDictionary,它们的 API 设计与常规设计差异很大。如果你对此觉得奇怪,那么正好阅读本文。...---- 不确定性 像并发集合一样, ConcurrentDictionary、ConcurrentQueue,其设计为线程安全,于是它的每一个对外公开的方法调用都不会导致其内部状态错误...你只能依靠其方法的返回值来使用刚刚调用那一刻确定的状态。...v : null; return value; } 这两段代码都使用到了可能涉及线程安全的一些代码。前者使用 Interlocked 做原则操作,而后者使用并发字典。...对于多线程并发导致的不确定性,使用方虽然可以通过 lock 来规避以上第二条问题,但设计方最好在设计之初就避免问题,以便让 API 更好使用

14620
您找到你想要的搜索结果了吗?
是的
没有找到

iOS 面试策略之语言工具-Swift

本章节主要针对 iOS 的主流开发语言 Objective-C 和 Swift 进行分析和对比,同时也整理了 Xcode 编辑器的使用技巧和经验。...Struct 相比 class 在使用上有什么优势? 2. Swift 是面向对象还是函数式的编程语言? 关键词:#面向对象 #函数式编程 Swift 既是面向对象的,又是函数式的编程语言。...File-private 也是 Swift 3 新添加的权限。其被修饰的对象只能在当前文件中被使用。例如它可以被一个文件中的不同 class,extension,struct 共同使用。...实际上为了安全起见,很多公司规定任何时候都使用 weak 去修饰。 7. 在 Swift 中,怎样理解是 copy-on-write?...首先这个方法完全可以利用泛型进行优化,同时可以在创建 res 数组时加上 reserveCapacity 以保证其性能。

1.3K10

肘子的 Swift 周报 #022 | 忙碌的一周

我在使用 Swift 5.10 重新编译现有项目代码时,主要遇到的问题源于新引入的 strict concurrency for global variables[2] 机制,尤其是对类型属性的警告。...前一期内容|全部周报列表 原创 如何为 SwiftData 动态的构建复杂的谓词[3] Fatbobman( 东坡肘子 )[4] NSCompoundPredicate 让开发者能够将多个 NSPredicate...他在本文中深入分析了使用 Core Image 框架搭配 Metal 着色器进行图像处理时所面临的挑战及其相应的解决策略。...Swift 5.10[13] Michael Tsai[14] 近日,随着 Xcode 15.3 的发布,Swift 5.10 正式面世。.../blob/main/proposals/0412-strict-concurrency-for-global-variables.md [3] 如何为 SwiftData 动态的构建复杂的谓词: https

8710

SwiftShot:为增强现实创建游戏

SwiftShot:为增强现实创建游戏 了解Apple如何为WWDC18构建精选演示,并获得使用ARKit,SceneKit和Swift制作自己的多人游戏的技巧。...如果您正在托管,该应用程序会要求您找到一个平面(桌子)来放置游戏板:拖动,旋转和捏合以定位和调整板的大小,然后在准备好玩时点击,并出现游戏板。...在每一个上update,它按照添加顺序从队列中删除命令,并在游戏世界中为每个命令应用结果效果(启动球)。 将游戏事件集定义为Swift枚举可带来多种好处。...为了使用这种紧凑的位打包对结构进行编码和解码,SwiftShot定义了一种BitStreamCodable协议,扩展了Swift Codable协议的模式,并提供了一种将位流编码类型与Codable同一数据流中的其他...Swift 类型相结合的方法。

1.7K30

让你的编译器更懂你,写出更棒的Swift

自从Swift诞生以后,苹果就一直在努力让它变得更好,更快。相比更加灵活的Objective-C,Swift显得更加老实本分。但是,如果你真的对它了解之后,你会觉得原来有如此之大的威力。...但是在开发过程当中,我们往往没有把编译器的作用发挥到极致,主要原因就是我们并不是太明白编译器是如何为我们工作的。...Whole Module Optimizations 这是一个我们应该好好利用的特性,使用很简单,如下图开启: ?...比如下面这个例子: 1.swift: func foo() { let x: Int = ... let y: Int = ......这里会存在两个主要的问题,一个是数据的类型只能在运行的时候才能真正的确定下来,这样带来了安全隐患;同时,由于动态派发,速度也将会大打折扣,所以还在使用OC的朋友,是不是可以考虑下使用Swift了呢?

42330

App架构设计经验谈:技术选型

Objective-C/Swift 我在项目中选择了Swift,主要基于三个原因: Swift真的很简洁,生产效率很高; Swift取代Objective-C是必然的趋势; 目前iOS只有我一个人开发,...不需要顾虑到团队里没人懂Swift。...如果你的团队里没人懂Swift,那还是乖乖用Objective-C吧;如果有一两个懂Swift的,那可以混合开发,并让不懂的人尽快学会Swift;如果都懂了,不用想了,直接上Swift吧。...我个人也不太喜欢CocoaPods,使用起来比较麻烦,耦合性也较高,我使用过程中也经常出问题,而且还总是不知道该怎么解决,要移除时也是非常麻烦。...我在实际项目中思考架构时,也不会想着要用哪种模式,我只思考现阶段,以现有的人力资源和时间资源,如何才能更快更好地完成需求,适当考虑下如何为后期扩展或重构做准备。

1.4K10

谈谈 Swift 中 Sequence(序列) 、Collection(集合) 和高阶函数

所以我们每次在使用 for...in的时候,其实都是使用这个集合的迭代器来遍历当前的集合或者序列中的元素。...下面我们来实现删除元素: 如果我们想要Remove掉一个元素可以使用Swift标准库中的协议RangeReplaceableCollection 这个协议允许我们通过一个集合来替换当前集合中任意自己的元素...self.count if n == 0 { return [] } var result = ContiguousArray() result.reserveCapacity...所以对于可选值使用map函数会返回一个可选的可选值,使用flatMap返回一个可选值。...使用lazy关键字后返回的是一个LazySequence的值,下面我们就去源码中看看LazySequence: 在LazySequence.swift文件中我们可以看到: lazy是Sequence扩展中的一个计算属性

2K30

iOS 面试策略之算法基础1-3节

{ return stack.popLast() } } // 初始化一个栈 let stack = Stack() 最后特别强调一个操作:reserveCapacity(...而在日常开发中,它们使用起来也非常高效(栈上运行)和安全(无需顾虑线程问题),因为他们都是值类型。 2. 链表 本节我们一起来探讨用 Swift 如何实现链表以及链表相关的技巧。...总结 这次我们用 Swift 实现了链表的基本结构,并且实战了链表的几个技巧。在结尾处,我还想强调一下 Swift 处理链表问题的两个细节问题: 一定要注意头结点可能就是 nil。...在 Swift 中,没有内设的栈和队列,很多扩展库中使用 Generic Type 来实现栈或是队列。正规的做法使用链表来实现,这样可以保证加入和删除的时间复杂度是 O(1)。...然而笔者觉得最实用的实现方法是使用数组,因为 Swift 没有现成的链表,而数组又有很多的 API 可以直接使用,非常方便。 基本概念 对于栈来说,我们需要了解以下几点: 栈是后进先出的结构。

1.6K30

iOS开发-音视频开发

何为编码? 1.1 为何编码? 从存储角度和网络传输以及通用性 3个角度,压缩已经成了不可或缺的动作.压缩编码最基本的指标,就是压缩比....压缩比通常都是小于1(如果等于或者大于1,是不是就失去了编码的意义了.编码的目的就是为了压缩数据体量). 1.2 何为编码?...硬编码: 使用非CPU进行编码,例如使用GPU芯片处理 软编码: 使用CPU来进行编码计算. 1.2.2 软编码与硬编码的区分?...硬编码:性能高,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(X264)的,质量基本等同于软编码。...GPUImage OC版本下载地址 GPUImage Swift版本下载地址 视频\音频编码压缩 视频: 使用FFmpeg,X264算法把视频原数据YUV/RGB编码成H264 音频: 使用fdk_aac

2.5K40

肘子的 Swift 周报 #015 | 新框架、新思维

相比面临的问题, 能以更符合 Swift 风格的方式进行开发, 仍令我感到期待和兴奋。...Adapting your App Icon to visionOS[9] Flora Damiano[10] 本文深入探讨了如何为 visionOS 系统优化应用图标的设计。...Swift 中文词语纠错[13] 一个工匠 (海驴)[14] 本文专注于探讨如何利用 Swift 进行中文词语纠错。...面对写作中常见的错别字问题,作者尝试了几种流行的文字纠错服务,却发现它们功能有限,不支持 markdown 格式,且对非频繁使用者的成本较高。...他还分享了开发过程中遇到的一些主要挑战,如何准确识别文本文件、进行文本分句校准、中文纠错检测与校准,以及在非终端环境中实现与 python 脚本的互通。

12310

聚焦位置-选择您喜欢的位置放置虚拟物体

让我们为焦点方块添加一个新的Swift文件。右键单击视图控制器+ ARSCNViewDelegate并选择新建文件...。然后,选择Swift File,单击Next。...另外因为我们重写,请使用super.init()。这将调用SCNNode超类的默认初始化程序,并在我们使用自己的代码自定义之前设置所有内容。...简而言之,这些结果包含有关变换的信息,方向,位置和比例。 guard let worldTransform = hitTestResult?....在viewWillDisappear之后的ViewController.swift中,为更新创建一个新函数。...打开和关闭 我们如何为焦点方块添加漂亮的触感?您可能已经意识到我们有两个用于焦点方块的资产图像,一个是开放的,一个是关闭的。这应该会给你一个提示,我们都会在不同情况下使用它们。

2.4K30

为自定义属性包装类型添加类 @Published 的能力

PublishedObject(包装值为引用类型的 @Published 版本)、@CloudStorage(类似 @AppStorage ,但适用于 NSUbiquitousKeyValueStore ),来展示如何为其他的自定义属性包装类型添加可访问包裹其的类实例的属性或方法的能力...何为 @Published 的能力 @Published 是 Combine 框架中最常用到的属性包装器。...@Published 能力的秘密 从 Proposal 中找寻答案 我之前并不习惯于看 swift-evolution 的 proposal[3],因为每当 Swift 推出新的语言特性后,很多像例如...因此,如果想详细了解某一项 Swift 新特性的来龙去脉,最好还是要认真阅读与其对应的 proposal 文档。...属性包装器的运作原理 考虑到属性包装器中的包装值( wrappedValue )众多的变体形式,Swift 社区并没有采用标准的 Swift 协议的方式来定义属性包装器功能,而是让开发者通过声明属性 @

3.2K20

窥探Swift编程之错误处理与异常抛出

一、主动退出程序的几种情况 在Objective-C中,在单元测试时我们会使用断言,断言中条件满足时会产生异常,并打印出相应的断言错误,在Swift中也有几种产生异常的语法。...Assertions(断言) 在单元测试中是少不了断言的,Swift中的断言和Objective-C的区别不是太大,使用方法也是大同小异。...声明完错误类型后,就可以在处理错误抛出异常时使用自定义的错误类型了。下方将会一步步带你走完Swift中的错误处理的路程。 1.使用枚举创建错误类型 (1).遵循ErrorType协议,自定义错误类型。...在声明枚举时,我们使用了枚举元素值绑定的特性(关于枚举使用的更多细节请参考之前的博客《窥探Swift之别样的枚举类型》)。...接下来就看一下如何为我们的错误类型添加错误原因。

2.2K50

Apple的Core ML3简介——为iPhone构建深度学习模型(附代码)

并且它支持在GPU上进行训练 3)用于TensorFlow的Swift Swift for TensorFlow有一个灵活、高性能的类似于TensorFlow/PyTorch的API来构建复杂的神经网络架构...以下是相同的模型在Swift和Python的不同表达(注意相似性): ? 当你需要模型的高性能并希望有效地部署它们时,可以选择Swift使用TensorFlow。...如果你想执行图像分析任务,人脸或地标检测、文本检测、条形码识别、图像配准和一般特征跟踪,那么视觉就是你的选择。 ?...-Resnet50.git 注意: 对于本文,你需要一台macOS机器,否则无法实现该项目 任何为Apple设备开发的应用程序都是用Swift编写的 建立我们的深度学习模型 一旦你下载项目,你会看到有两个文件夹...我鼓励你进一步探索和尝试最新的模型,BERT,并创建更有趣的应用程序。

2K20

Swift基础 高级操作员

与C中的算术运算符不同,Swift中的算术运算符默认不会溢出。溢出行为被困住,并报告为错误。要选择溢出行为,请使用Swift的第二组默认溢出的算术运算符,例如溢出加法运算符(&+)。...下面的示例展示了如何为自定义结构实现算术加法运算符(+)。算术加法运算符是一个二进制运算符,因为它在两个目标上运行,而它是一个内缀运算符,因为它出现在这两个目标之间。...如果它们在目标(-a)之前,它们是前缀,如果他们遵循目标(b!则为后缀运算符。...在许多简单的情况下,您可以要求Swift为您提供等效运算符的合成实现,《采用使用合成实现的协议》中所述。 自定义操作员 除了Swift提供的标准运算符外,您还可以声明和实现自己的自定义运算符。...结果建设者 结果生成器是您定义的一种类型,它以自然、声明的方式添加用于创建嵌套数据(列表或树)的语法。使用结果构建器的代码可以包括普通的Swift语法,例如if和for,以处理条件或重复的数据。

13700

小兴逛Google IO 2017(day3实况)

Google一直想找一门新的语言取代Java,之前较多传闻是Apple的Swift。...其实Kotlin跟Swift很像,选择Kotlin而不是Swift,我猜测跟当年从WebKit上面拉取Blink分支独立发展一样,Google在技术改革上比较激进,天马行空,而Apple相对保守,哈哈。...这个主题是关于如何为VR设计清晰的屏幕界面的,主要介绍了进行屏幕虚拟化和设计VR交互的时候存在的一些坑。这个主题分享内容比较简单。 ? ?...最后就是介绍韩国的某款游戏使用Vulkan的效果,全是游戏的广告,最后才放了一下使用OpenGL和Vulkan的对比。这里我就不上图了,哈哈。...这个主题比较有意思,演讲者举了很多例子来介绍如何为Google Assistant设计良好的会话行为,让用户体验起来更便捷。 ?

1K100

100个iOS开发设计程序员面试题汇总,你将如何作答?

能否描述一下如何在应用中使用ApplePay? ·请解释一下iOS应用沙盒机制。 ·VoiceOver是什么?请举例解释一下iOS中的辅助功能(Accessibility)。开发者如何使用这些功能?...·请问何为Keychain服务? ·为什么移动设备上的缓存和压缩是不可或缺的? ·请解释一下~/Documents,~/Library和~/tmp。iOS中的~属于什么目录?...·Swift和Objective-C分别是什么?两者相比有何不同之处,又有何联系? ·为什么Optional在Swift语言中非常重要? ·请解释一下NSError。...在Swift中,什么情况下能使用NSError,什么情况下不能? ·请说明如何使用Instancetype及其重要性。 ·在Swift中,什么时候该用let,什么时候该用var?...·iOS使用的是哪些设计模式(DesignPatterns)?你的代码库使用的是哪些设计模式? ·iOS提供哪些线程?如何充分利用这些线程? ·请简要描述一下UIScrollView的执行过程。

1.4K40
领券