delegate

OC项目转Swift指南

ぃ、小莉子 提交于 2020-08-12 05:15:33
运行环境:Xcode 11.1 Swift5.0 最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些坑,于是有了这篇总结性的文档。 如果你也有将OC项目Swift化的需求,可以作为参考。 OC转Swift有一个大前提就是你要对Swift有一定的了解,熟悉Swift语法,最好是完整看过一遍官方的 Language Guide 。 转换的过程分自动化和手动转译,鉴于自动化工具的识别率不能让人满意,大部分情况都是需要手动转换的。 自动化工具 有一个比较好的自动化工具 Swiftify ,可以将OC文件甚至OC工程整个转成Swift,号称准确率能达到90%。我试用了一些免费版中的功能,但感觉效果并不理想,因为没有使用过付费版,所以也不好评价它就是不好。 Swiftify还有一个Xcode的插件 Swiftify for Xcode ,可以实现对选中代码和单文件的转化。这个插件还挺不错,对纯系统代码转化还算精确,但部分代码还存在一些识别问题,需要手动再修改。 手动Swift化 桥接文件 如果你是在项目中首次使用Swift代码,在添加Swift文件时,Xcode会提示你添加一个 .h 的桥接文件。如果不小心点了不添加还可以手动导入,就是自己手动生成一个 .h 文件,然后在 Build Settings > Swift Compiler -

常见问题

旧巷老猫 提交于 2020-08-11 20:56:17
1、wpf和winform的区别? 2、委托和事件的区别? 委托的本质bai,是一个类,而du事件,是一个委托类型的私有zhi变量加上两个公有方法dao(事件的+=和-=),这是本质区别。 打个比方,string 也是一个类,而string s = "a",这个s是string类型的一个变量(略有不恰当,为了方便直观理解)。 public delegate void myDel();相当于你创建了一个myDel的类,所以委托可以在任何地方创建,类需要实例化,所以委托需要实例化,要myDel m = ……; 申明一个事件 public event myDel myEvent; 事件myEvent是一个myDel类型的一个变量,因为是变量,所以事件只能在类里面申明,不需要实例化,有点类似与上面的那个m,当然不全是,他还有两个方法(+=,-=),调用一次+=方法,myEvent += MethodA;其实是把MethodA方法,封装成一个myDel类型的委托对象,然后把这个对象的引用赋值给这个myEvent变量。如果多次调用+=,就是多个方法封装成了多个myDel委托对象,然后这些委托对象放在一个列表里面,然后myEvent就指向这个列表,触发的时候,就是调用这个列表里面的所有委托的Invoke方法。 上述是编译时他们的本质区别,用法上的区别主要就是事件只能在申明他的这个类里面调用触发

项目转Swift指南

爷,独闯天下 提交于 2020-08-11 15:42:51
运行环境:Xcode 11.1 Swift5.0 最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些坑,于是有了这篇总结性的文档。如果你也有将OC项目Swift化的需求,可以作为参考。 OC转Swift有一个大前提就是你要对Swift有一定的了解,熟悉Swift语法,最好是完整看过一遍官方的 Language Guide 。 转换的过程分自动化和手动转译,鉴于自动化工具的识别率不能让人满意,大部分情况都是需要手动转换的。 自动化工具 有一个比较好的自动化工具 Swiftify ,可以将OC文件甚至OC工程整个转成Swift,号称准确率能达到90%。我试用了一些免费版中的功能,但感觉效果并不理想,因为没有使用过付费版,所以也不好评价它就是不好。 Swiftify还有一个Xcode的插件 Swiftify for Xcode ,可以实现对选中代码和单文件的转化。这个插件还挺不错,对纯系统代码转化还算精确,但部分代码还存在一些识别问题,需要手动再修改。 手动Swift化 桥接文件 如果你是在项目中首次使用Swift代码,在添加Swift文件时,Xcode会提示你添加一个 .h 的桥接文件。如果不小心点了不添加还可以手动导入,就是自己手动生成一个 .h 文件,然后在 Build Settings > Swift Compiler - General

SpringAMQP 消息适配器

给你一囗甜甜゛ 提交于 2020-08-11 14:43:44
MessageListenerAdapter 即消息监听适配器 这一节,我们先写一下代码,再总结 MessageListenerAdapter 的使用 代码示例: 代码地址: https://github.com/hmilyos/rabbitmqdemo.git rabbitmq-api 项目下 复制代码 1.简单使用默认方法 修改上一节 SpringAMQP 消息容器 - SimpleMessageListenerContainer 的 RabbitMQConfig 的 messageContainer 方法 复制代码 @Bean //connectionFactory 也是要和最上面方法名保持一致 public SimpleMessageListenerContainer messageContainer(ConnectionFactory connectionFactory) { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); container.setQueues(queue001(), queue002(), queue003()); //监听的队列 container.setConcurrentConsumers(1); /

Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算

假装没事ソ 提交于 2020-08-11 10:29:33
Shone.Math开源系列1 — 基于.NET 5实现Math<T>泛型数值计算 作者:Shone .NET 5 preview 4已经可用了,从微软Build2020给出的信息看,.NET 5将实现框架统一,.NET 6将实现界面统一。开源的.NET更加有活力,咱们也从基础开始贡献一点微薄力量,拥抱开源,拥抱.NET未来。 Shone.Math 是一个支持Math<T>泛型数值计算和Real实数运算(浮点数、分数、PI,E,Log,Exp等无理数)的轻量级基础数学库 。该项目开源地址https://github.com/shonescript/Shone.Math,是本人把多年代码积累正式转向.NET 5,也是我的第一个开源项目,请大家多多支持了。 一、.NET泛型数值计算优势 .NET 2.0开始支持泛型编程,支持IEnumerable<T>, List<T>, Func<T,T,…>等各种泛型类型,提高了编程效率和质量,这是公认的价值。 但是对于基础类似的数值运算,.NET没有默认泛型实现方式。StackOverflow上有大量关于泛型数值计算的讨论,C#9.0的部分草案建议也提出添加对泛型计算的支持。 在大量处理数据时,特别是几何或空间数据计算时,泛型数值计算的主要优势是: (1)可重用: 专注于数值计算算法,不用为每种数据编写实现,提高开发效率; (2)无装箱:

整理:iOS开发知识点

白昼怎懂夜的黑 提交于 2020-08-11 09:24:49
iOS学习面试相关问题整理,希望能巩固自己的基础知识,当然也希望能帮助更多的开发者。 数据结构 1.数据结构的存储一般常用的有几种?各有什么特点? 2.集合结构 线性结构 树形结构 图形结构 3.单向链表 双向链表 循环链表 4.数组和链表区别 5.堆、栈和队列 6.输入一棵二叉树的根结点,求该树的深度? 7.输入一课二叉树的根结点,判断该树是不是平衡二叉树? 算法 1.时间复杂度 2.空间复杂度 3.常用的排序算法 4.字符串反转 5.链表反转(头差法) 6.有序数组合并 7.查找第一个只出现一次的字符(Hash查找) 8.查找两个子视图的共同父视图 9.无序数组中的中位数(快排思想) 10.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 Foundation 1.nil、NIL、NSNULL 有什么区别? 2.如何实现一个线程安全的 NSMutableArray? 3.atomic 修饰的属性是绝对安全的吗?为什么? 4.实现 isEqual 和 hash 方法时要注意什么? 5.id 和 instanceType 有什么区别? 6.self和super的区别 7.@synthesize和@dynamic分别有什么作用? 8.typeof 和 typeof,typeof 的区别? 9.类族 10.struct和class的区别 UIKit 1.UIView 和

Unity Addressable入门篇

て烟熏妆下的殇ゞ 提交于 2020-08-11 08:30:20
Addressable入门篇 配置Addressable 在unity2018.2及以上可以在Window->package Manager->中搜索Addressable并安装 安装完成后,所有的资源都会有一个可勾选的Addressable 当勾上后就会被Addressable系统管理 在Window->asset mangment->addressable->Groups查看和管理资源 AddressableName资源: 默认AddressableName就是资源在Assets下的路径==Path,可以直接F2重命名,这里简称key Addressale加载资源就是通过这个key key可以重复,加载单个时,如果key重复,那么加载的就是是第一个,读取多个时,可以加载所有相同可以的资源 labels标签: 每个资源可以设置多个标签,读取资源时,除了通过name读取还可以通过label读取label也可以当key用,可以加载单个和多个,加载顺序和key一样,多个label时加载单个为第一个 打资源包(单机本地) Content Packing&Loading 选择BuildPath->LocalBuildPath:运行地址,LoadPath->LocalLoadPath:读取运行包地址 打包:build->new build->Default build script

利用 Arthas 精准定位 Java 应用 CPU 负载过高问题

牧云@^-^@ 提交于 2020-08-10 23:33:31
最近我们线上有个应用服务器有点上头,CPU 总能跑到 99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥! 以前碰到类似问题,可能会考虑使用top -Hp 加 jstack命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。 申请阿里云服务时,可以使用 2000元阿里云代金券 ,阿里云官网领取网址: https://dashi.aliyun.com/site/yun/youhui 今天向大家推荐一款更高效更精准的工具:Arthas! Arthas 是 Alibaba 开源的 Java 诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档: https://alibaba.github.io/arthas 这次我们利用它来排查 CPU 负载高的问题。 CPU 负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个命令:thread,这个命令会显示所有线程的信息,并且把 CPU 使用率高的线程排在前面。 [arthas@384]$ thread Threads Total: 112, NEW: 0, RUNNABLE: 26, BLOCKED: 0, WAITING: 31, TIMED_WAITING: 55, TERMINATED: 0 ID NAME STATE %CPU TIME

C# 从1到Core--委托与事件

本秂侑毒 提交于 2020-08-10 18:13:55
  委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。 一、C#1.0 从委托开始 1. 基本方式   什么是委托,就不说概念了,用例子说话。   某HR说他需要招聘一个6年 .NET5 研发经验的“高级”工程师,他想找人(委托)别人把这条招聘消息发出去。这样的HR很多,所以大家定义了一个通用的发消息规则: public delegate string SendDelegate( string message);   这就像一个接口的方法,没有实际的实现代码,只是定义了这个方法有一个string的参数和返回值。所有想发招聘消息的HR只要遵守这样的规则即可。 委托本质上是一个类,所以它可以被定义在其他类的内部或外部,根据实际引用关系考虑即可。本例单独定义在外部。 为HR定义了一个名为HR的类: public class HR { public SendDelegate sendDelegate; public void SendMessage( string msg) { sendDelegate(msg); } }   HR有一个SendDelegate类型的成员,当它需要发送消息(SendMessage)的时候,只需要调用这个sendDelegate方法即可

Go 其四 函数

十年热恋 提交于 2020-08-10 13:23:16
  艺多不压身,学习一下最近蛮火的Go语言,整理一下笔记。相关Code和笔记也放到了Git上, 传送门 。 函数 -- 一等公民 与其他主要编程语言的差异 可以有多个返回值 所有参数都是值传递: slice, map, channel 会有传引用的错觉。以Slice举例,实际上是一个结构,传递过去的是指向具体内存的指针的值,所以操作的是同一个空间。看起来就像是传递的引用一样。 函数可以作为变量的值 (笔者注:看描述感觉类似于C#中的Delegate) 函数可以作为参数或返回值 (笔者注:感觉类似于C#中的Function与Action) 函数 可变参数及延迟运行 可变参数 func sum(ops ... int) int { s := 0 for _, op := range ops { s += op } return s } 延迟执行函数 defer 类似于Finnaly func TestDefer(t *testing.T){ defer func() { /*这个内联函数直到TestDefer执行完毕,返回前才会执行。 通常用于清 理资源,释放锁等功能*/ t.Log("Clear resources") }() t.Log("Started") panic("Fatal error") //defer 仍会执行 //panic是Go中程序异常中断,抛出致命错误 }