在 Fundamentals of Generic Programming[1] 里,Alexander Stepanov(泛型概念的创立者)用一段优雅的文字描绘了计算机技术不断泛化(generalized)的历史:
发送邮件其实是我们平常开发中算比较常见的一个需求吧。所以有必要稍微研究下,或者说找个好点的类库来使用,以备真要用到了又要重头开始学。
隐式的并发安全设计是一种在代码中考虑并发性和安全性的方法,通过结构、模式和技术来减少竞态条件和其他并发问题的出现,而无需显式地使用锁或同步原语。这种设计方法旨在降低开发人员处理并发性问题的复杂性,同时提高代码的可读性、可维护性和性能。
iOS循环引用 当前类的闭包/Block属性,用到了当前类,就会造成循环引用 此闭包/Block应该是当前类的属性,我们经常对Block进行copy,copy到堆中,以便后用。 单方向引用是不会产生循环引用。需要self引用闭包/Block,Block中使用self。 有两个规则: 如果你是通过引用来访问一个实例变量,那么将强引用至self。 如果你是通过值来访问一个实例变量,那么将直接强引用至这个“值”变量。 Object-C Block循环引用情况 一般来说我们总会在设置Block之后,在合适的时间
本篇博客我们就来聊一下combineLatest()的使用以及具体的实现方式。在之前的《iOS开发之ReactiveCocoa下的MVVM》的博客中我们已经聊过combineLatest()的用法,虽然是使用老版本的ReactiveCocoa和Objective-C语言介绍的,不过使用原理上都是一致的。都是将两个信号量进行合并,当其中一个信号量发出Value事件时,如果另一个信号量之前也发送过Value事件,那么就取出最后一个事件的Value值与当前发送的事件值进行合并,然后将合并后的值发送给新的信号量的观
之前发了这篇iOS面试总结(2020年6月),没想到挺受大家欢迎,本来是没打算为它写答案,但有几个人建议我最好出一篇答案,提的人多了我就答应了下来。因为最近比较忙,断断续续总算补完了,就有了这篇文章,希望它对大家还有用处。这些都属于参考答案,如果大家感觉有不对不准确的地方也欢迎指出,我会及时更新。
本篇作为scala快速入门系列的第三十八篇博客,为大家带来的是关于Actor并发编程的内容。
本库主要使用 WebViewJavascriptBridge 和 webkit MessageHandler进行封装。
打个比方,如果把找工作理解成考大学,面试就是高考,市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”,重点准备,期待“押题”成功。但实际上,即使面试同一家公司,它会有不同部门,不同业务线,不同面试官,即使遇到同一面试官,他也不一定就每次考察完全一样的内容。想想高考中那些考的好的同学,他们肯定不是靠“押题”才能取得好成绩吧,他们大多靠的是平常积累及对知识点灵活掌握,那面试也一样啊。执着于搜题,把面试题当做重点进行“复习”,还不如自己划出“考纲”,各个知识点逐一检查掌握情况,复习的更全面呢。
Scala 的 Actor 类似于 Java 中的多线程编程。但是不同的是,Scala 的 Actor提供的模型与多线程有所不同。Scala 的 Actor 尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。此外, Scala Actor 的这种模型还可以避免死锁等一系列传统多线程编程的问题。
本文收录总结了常见的 Swift 和 Objective-C 的面试题,希望对大家有所帮助。
SQL注入是一种常见的攻击手法,主要实现方式是通过提供精心构造的数据使得在服务端拼接成具有恶意的SQL语句,可以实现万能登录、暴漏数据库和数据表结构、执行存储过程甚至获取超级管理员权限等,具有非常大的威胁,曾经是黑客非常常用的技术,常见于WEB网站的攻击,桌面程序也存在类似的攻击面。
距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数。在我们回顾过去四五年 iOS 系统的发展的时候,不免感叹变化速度之快,迭代周期之短。iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 里的分屏多任务特性等等。Apple 近年都是在 WWDC 发布新的系统和软件,然后在秋季和冬季 (或者来年春季) 召开硬件产品的发布会。WWDC 上每一项软件的更新其实都预示了相应的硬件的方向,相信今年也不会例外。
Flutter邀请你用Dart语言开发你的移动应用,一套代码可以同时构建Android和iOS。但是Dart不会编译成Android’s Dalvik字节码,在iOS上也不会有Dart/Objective-C的绑定。这意味你的Dart代码并不会直接访问平台特定的API,即 iOS Cocoa Touch 以及 Android SDK的API。
CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
之前,我已经写过 Android 端实现1对1音视频实时通话 的文章。在那篇文章中,我向大家介绍了在 Android 端是如何使用 WebRTC 进行音视频通话的。今天,我们再来看看 iOS 端1对1音视频实时通话的具体实现。
Swift 是一种强类型语言。即默认类型是安全的静态类型。纯Swift类的函数调用已经不再是OC的运行时发送消息,而是类似于C++的vtable,在编译时就确定了调用哪个函数,所以没法通过runtime获取方法,属性。Swift中的动态性可以通过OC运行时来获得,动态性最常用的就是方法替换(Method Swizzling)。
如前一主题「为什么现代系统需要新的编程模型」所述,常见的编程实践不能合适地满足现代系统的需求。幸运的是,我们不需要放弃我们所知道的一切。相反,Actor 模型以一种原则性的方式解决了这些缺点,允许系统以更好地匹配我们的构思模型(mental model)的方式运行。Actor 模型抽象允许你从通信的角度来考虑你的代码,这与大型组织中人员之间发生的交换没有什么不同。
使用Python+tkinter编写GUI程序,程序运行后可以自由拖放组件调整组件位置。
本篇博客我们就来聊一下Spring框架中的观察者模式的应用,即事件的发送与监听机制。之前我们已经剖析过观察者模式的具体实现,以及使用Swift3.0自定义过通知机制。所以本篇博客对于事件发送与监听的底层实现就不做过多赘述了。下方会给出Spring中是如何进行事件的发送与监听的。聊完事件的发送与监听,我们再来聊一下如何使用@Profile注解来切换“生产环境”与“开发环境”。 一、Spring中的事件发送与监听 Spring中的事件发送与监听说白了就是广播。由Publisher来发送Event,有Listen
RxJava 通过 组合调用 / 链式调用 被观察者 / 观察者 / 订阅 / 操作符 要素 ;
近期由于一些原因接触到了并行计算,对于这个陌生的领域我最先接触到的是MPI框架。MPI(Message Passing Interface),可以理解为是一种独立于语言的信息传递标准。目前它有两种具体的实现OpenMPI和MPICH,也就是说如果我们要使用MPI标准进行并行计算,就需要安装OpenMPI或MPICH库。本文以MPICH为例,在ubantu中安装MPI的环境,并对vscode进行配置。
传统的游戏服务器要么是单线程要么是多线程,过去几十年里CPU一直遵循摩尔定律发展,带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效,为什么呢?
在前面的时候我们可以通过微信自动发送消息给女朋友,让女朋友很高兴,女伴每天都非常高兴你发过去的消息。那我们想通过手机号码发送短信给女朋友这要怎么做呢?
14、信号量、如果有两组任务执行,需要先执行某两组,再执行另外两组,有多少种方式?
在企业中,需要使用许多CRM系统,例如交易系统、监控报警系统等应用支撑着公司的核心业务流程;有时候也需要行政人事定时发送一些企业人文关怀、疫情通知等信息。通过钉钉的自定义机器人,可以将这些系统事件或消息自动发送至聊天群。
1、《Python程序设计基础(第2版)》(ISBN:9787302490562,董付国,清华大学出版社,2018年1月出版,2020年12月第18次印刷),连续两年(2019、2020)被评为清华大学出版社畅销教材,2020年被评为山东省高等教育优秀教材。
在并发编程中,我们必须考虑的问题时如何在两个线程间进行通讯。这里的通讯指的是不同的线程之间如何交换信息。
本 Session 讲了为了让你的应用包体积更小,运行更快,启动速度更快,我们对 Swift 和 Objective-C 运行时做了怎样的优化。同时通过本 Session 你将发现如何通过高效的协议检查,更小的消息发送,以及优化后的 ARC 机制,来提高你的 App 性能。
给定若干视频文件,为其批量添加三层弹幕,要求弹幕文字嵌入到原始画面下方,不遮挡原始画面中的有效内容。假设原始画面中主要背景色为白色。
回顾TCP协议:一个非常重要的数据传输协议,很多网络协议都是以TCP协议为基础的;TCP协议要求服务器和客户端通过三次握手交互的方式建立可靠的连接,然后再进行数据保温的发送,在发送过程中保证数据包的顺序和数量不会丢失,最后如果要断开连接需要四次挥手的方式进行连接的安全断开。
本文笔者在 MDCC 16 (移动开发者大会) 上 iOS 专场中的主题演讲的文字整理。发布于 2016年11月29日 最后更新于 2020年10月22日
面向对象总体概括: Swift 不仅能够面向过程编程,也能够面向对象编程(OOP)。面向对象其实就是“以对象为核心”,把我们的客观世界想着是由一个个对象组成的,面向对象编程则为对象提供了属性和方法,属性就是为了描述对象的一些状态,方法则是告诉你对象该做什么。面向对象和核心就是“类”和“对象”!在我刚接触编程的时候,其实我也很容易把这东西混淆了,你要也是刚接触编程,能帮到你的,我觉得反而是时间。你要实在是有点难理解,就别去钻牛角尖,也许明天因为某个东西你就会恍然大悟。超喜欢那种感觉! 面
托马斯.库尔提出“科学的革命”的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词。编程范式一般包括三个方面,以OOP为例:
对讲机程序,就是双方互相通话的过程,简单一点的逻辑就是双方每次只能说一句话,然后等待对方回答之后继续说话。
Java 是一门面向对象编程语言,它不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。此外,Java 还具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
创建WKWebView lazy var webView: WKWebView = { // 创建WKPreferences let preferences = WKPreferences() // 开启js preferences.javaScriptEnabled = true // 创建WKWebViewConfiguration let configuration = WKWebViewConfiguration() // 设置WKWebVie
ConcreteImplementorA/B:真正实现Implementor接口的对象
一直以来,都很想学学ReactiveCocoa这个神奇的技术,但是最后都由于各种原因搁置了。这次终于也认真的研究一番,把自己学习心得整理出来留个记录。 目录: 一、了解函数响应式编程 二、React
在之前发布Objective-C系列博客的时候,其中提到过OC的通知机制,请参考《Objective-C中的老板是这样发通知的(Notification)》这篇博客。在之前关于Notification的博客中,只介绍了Foundation框架中的通知的使用方式。正如前面博客中提到的那样,通知是“一对多的关系”,类似于广播。一个人发通知,多个人接收。这也就是设计模式中的“观察者模式”。接收者的一方是Observer(观察者),而发送方是Subject(主题)。一个人要想成为Observer,要在Subject
说到并行计算,我们有一个不可绕开的话题——MPI编程。MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。与OpenMP并行程序不同,MPI是一种基于信息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。简而言之,MPI标准定义了一组具有可移植性的编程接口。
首先想像一下,女朋友生气了,都不想理你,旁边就只有一台电脑。然后女朋友把你赶出去了,这这么办!
由上面一章中,我们了解了什么是RunTime,RunTime用来做什么,下面了解一下Runtime数据结构。
在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取,根据读取到的全局变量值执行相应的动作,达到通信协作的目的。而实时操作系统往往采用邮箱、消息队列、信号用于线程间的通信。
在 WWDC2020 中 Objective-C 运行时的改进这个视频提到关于类的的数据结构的一些变化,本文是对这个视频提到的部分变化进行翻译。
与接收消息函数最直接相关的东西肯定是消息本身,所以消息本身的内容就是我们的切入点。我们可以首先找到存放消息内容的地址,然后对地址下断,通过栈回溯最终定位到接收消息的函数
打开微信,我们可以和别人进行聊天,发送消息。非常方便,那微信是怎么来的呢?这个本质的问题让人突发奇想,我们能不能做一个属于自己的微信聊天工具呢?
领取专属 10元无门槛券
手把手带您无忧上云