target

.NET Framework源码研究系列之---Delegate

断了今生、忘了曾经 提交于 2020-03-25 14:40:21
前言   曾几何时能看到微软产品的源码简直是天方夜谭,不过现在这却成了现实,微软终于对外开放了它的产品的源代码.抛去开源运动与微软之间的世代情仇,抛去微软这一做法的初衷,这总归是件好事,能够让我们拨开云雾,一窥优秀产品的秘密.   前两天看到有位仁兄在随笔中的留言,说他以为".NET中的设计模式"是在讲.NET Framework与设计模式的关系,其实不是,不过这也让我想起来自己确实研究过.NET Framework的源码,于是就找打算找时间把自己的心得体会拿出来和大家一起分享.   今天就先从最容易让人困惑的委托(delegate)开始,让我们步入.NET Framework源码世界,共同学习优秀的程序设计.   先看委托的定义: 用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。   相信看到这段话之后,很多人,包括我自己就开始一起探索 委托 与 函数指针 ,于是各种网文就出现了.但委托到底是什么呢?我们先看一段很简单的代码: public delegate void OnAction(int flag); 这里我们定义了一个最简单的委托: OnAction . MSDN解释 Delegate 类是委托类型的基类,但只有系统和编译器可以显式地从 Delegate 类或 MulticastDelegate

OCUnit测试框架

China☆狼群 提交于 2020-03-25 13:48:59
使用OCUnit测试框架 iOS单元测试框架 原则上,是否使用测试框架都不会影响单元测试结果,但是“工欲善其事,必先利其器”使用单元测试框架更便于我们测试和分析结果。 主要的iOS单元测试框架有: OCUnit,是开源测试框架,与Xcode工具集成在一起使用非常方便,测试报告以文本形式输出到输出窗口; GHUnit,是开源测试框架,它可以将测试报告以应用形式可视化输出到设备或模拟器上,也可以以文本形式输出到输出窗口;GHUnit可以测试OCUnit编写的测试用例; OCMock,是开源测试框架,它主要为测试提供Mock对象(伪对象)。 添加OCUnit到工程 添加OCUnit到工程中有两种方法,一种是在创建工程时添加,勾选“include Unit Tests”;另一种是在现有工程中添加“Cocoa Touch Unit Testing Bundle”Target来实现。下面我们详细介绍这两种添加过程。 1、创建工程时候勾选“include Unit Tests” 该种方式添加的单元测试属于应用测试(Application Testing)。在创建一个工程时,如果采用“Single View Application”模板,在选项中勾选“include Unit Tests”即可在工程中添加OCUnit框架。 工程创建完,在导航面板中会多一个PITaxTests组(<工程名

.NET枚举类型优化探讨(三)

筅森魡賤 提交于 2020-03-25 11:57:48
在 .NET枚举类型优化探讨(二) 中我们探讨了“使用类或结构来替代部分枚举类型”的方案并试图进行进一步的重构和优化,但是发现有很多限制,不但没有完成重构,且发现了很多该方案不适用的地方和缺陷。在某些情况下,这种方案会对生产带来相反的作用,所以在文中我建议不要滥用。今天我们来探讨一下使用.NET中的 Attribute特性 来扩展.NET枚举值的方案。 前面我们提到,.NET中的枚举类型的成员定义约束是很严格的,只能在里面增删字段,而不能定义方法、属性等高级成员。当枚举类型与单个数值常量绑定的时候,只需要在字段后面使用“=”赋值即可,但是如果我们需要绑定非数值常量或想绑定更多的信息时该怎么办呢? 在编写本文之前,我综合网上现有的资料,大概总结了一下,有如下方案可供参考: 如果想绑定1条中文常量,那么字段直接声明为中文就可以了。理由是:.NET支持Unicode编码,而且该方案不需要任何额外的编码; 可以使用 Dictionary<,> 字典类。理由是:反正枚举值都是唯一的,可以作为键,而中文常量可以作为值,而且是泛型,效率高; 还是方案2,只不过当需要绑定多个常量的时候,可以考虑将键值的中文替换为一个自定义对象; 使用 Attribute特性 来扩展,但缺点是需要反射; 前三种方案都很简单,网上也有其他朋友提供的资料,今天我们只讨论最后一种。这里要牵扯到一些概念

委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

我与影子孤独终老i 提交于 2020-03-25 11:26:46
委托是一个类。 namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { static void Main(string[] args) { } } } 使用Reflector查看委托的IL代码: ○ 委托的确是一个类 ○ 委托的构造函数接收方法和类实例 ○ 而且是多播委托,可以用+=为委托变量赋值 ○ 委托内部使用Invoke方法触发方法 ○ BeginInvoke和EndInvoke方法用于多线程场景 接下来体验委托如何使用,以及委托的Method和Target属性分别代表什么。 namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { static void Main(string[] args) { //委托与静态方法 MyDelegate d = new MyDelegate(M1); d(10); Console.WriteLine(d.Method); if (d.Target == null) { Console.WriteLine("当前委托调用的是静态方法,没有类实例"); } else { Console

vue2.0组件间事件派发与接收

青春壹個敷衍的年華 提交于 2020-03-25 08:57:57
在vue的开发中,经常会在两个组件间进行事件的通信 在vue1.0中我们使用$dispatch 和 $broadcast child.vue: this.$dispatch('eventName',this.data); parent.vue: event:{ 'eventName':function(data) { // 执行的方法 } } 但是在vue2.0中$dispatch 和 $broadcast被弃用,因为基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆弱,并且这只适用于父子组件间的通信。官方给出的最简单的升级建议是使用集中的事件处理器,而且也明确说明了 一个空的vue实例就可以做到,因为Vue 实例实现了一个事件分发接口 在vue2.0中在初始化vue之前,给data添加一个 名字为eventhub 的空vue对象 new Vue({ el: '#app', router, render: h => h(App), data: { eventHub: new Vue() } }) 某一个组件内调用事件触发 this.$root.eventHub.$emit('eventName', event.target); 另一个组件内调用事件接收, 在组件销毁时接除事件绑定,使用$off方法 created() { this.$root

【Leetcode 做题学算法周刊】第三期

偶尔善良 提交于 2020-03-25 06:45:11
首发于微信公众号《前端成长记》,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35.搜索插入位置 38.报数 53.最大子序和 58.最后一个单词的长度 66.加一 Easy 35.搜索插入位置 题目地址 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例: 输入: [1,3,5,6], 5 输出: 2 输入: [1,3,5,6], 2 输出: 1 输入: [1,3,5,6], 7 输出: 4 输入: [1,3,5,6], 0 输出: 0 题目分析设想 这道题目有点明显,题干说明了是排序数组,重点是排序数组,所以很明显的第一反应会使用二分法来解题。同时可以注意一下,数组中无重复元素。所以这道题我就按两个方案来作答: 暴力法,直接遍历 二分法,可以理解成不断折半排除不可能 编写代码验证 Ⅰ.暴力法 代码: /** * @param {number[]} nums * @param {number} target * @return {number} */ var searchInsert = function(nums, target) { if (nums

注解(Annotation)自定义注解

╄→尐↘猪︶ㄣ 提交于 2020-03-25 04:12:06
  要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 元注解:   元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:     1.@Target,     2.@Retention,     3.@Documented,     4.@Inherited   这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。    @Target :    @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。     作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)    取值 (ElementType) 有:     1.CONSTRUCTOR:用于描述构造器     2.FIELD:用于描述域

Qt3D

倾然丶 夕夏残阳落幕 提交于 2020-03-24 17:32:10
一、 二、 #include "mainwindow.h" #include <QApplication> #include "scenemode.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); SceneMode w; w.show(); return a.exec(); } #ifndef SCENEMODE_H #define SCENEMODE_H #include <QObject> #include <QWidget> #include <Qt3DExtras> #include <Qt3DInput> #include <Qt3DCore> #include <QVBoxLayout> #include "orbittransformcontroller.h" class SceneMode : public QWidget { Q_OBJECT public: explicit SceneMode(QWidget *parent = nullptr); signals: public slots: }; #endif // SCENEMODE_H #include "scenemode.h" SceneMode::SceneMode(QWidget *parent) :

Android签名总结

柔情痞子 提交于 2020-03-24 13:37:38
转:http://www.cnblogs.com/wanqieddy/p/3556060.html signapk.jar与eclipse export插件默认赋予程序一个DEBUG权限的签名 signapk.jar包含有系统权限(system api, permission),而eclipse export插件默认赋予程序一个DEBUG权限的签名。 D:\work_feixun\GalleryBack>java -jar signapk.jar platform.x509.pem platform.pk8 D:\work_feixun\Gallery2\bin\Gallery.apk Gallery_signed.apk 注: signapk.jar 位于 out/host/linux-86/framework/signapk.jar platform.x509.pem platform.pk8 位于 build/target/product/security/platform.x509.pem, platform.pk8 Gallery.apk的生成,先在eclipse中对project->clean,然后 run ->android application.在bin目录下会生成Gallery.apk。 最后 D:\work_feixun\GalleryBack>java

iOS 头条一面 面试题

放肆的年华 提交于 2020-03-24 13:26:27
3 月,跳不动了?>>> 1、如何高效的切圆角? 切圆角共有以下三种方案: cornerRadius + masksToBounds:适用于单个视图或视图不在列表上且量级较小的情况,会导致离屏渲染。 CAShapeLayer+UIBezierPath:会导致离屏渲染,性能消耗严重,不推荐使用。 Core Graphics:不会导致离屏渲染,推荐使用。 2、什么是隐式动画和显式动画? 隐式动画指的是改变属性值而产生的默认的过渡动画(如background、cornerRadius等),不需要初始化任何类,系统自己处理的动画属性;显式动画是指自己创建一个动画对象并附加到layer上,如 CAAnimation、CABasicAnimation、CAKeyframeAnimation 。 3、UIView 和 CALayer 的区别? UIView 是 CALayer 的 delegate,UIView 可以响应事件,而 CALayer 则不能。 4、离屏渲染? iOS 在不进行预合成的情况下不会直接在屏幕上绘制该图层,这意味着 CPU 和 GPU 必须先准备好屏幕外上下文,然后才能在屏幕上渲染,这会造成更多时间时间和更多的内存的消耗。 5、Objective - C 是否支持方法重载(overloading)? 不支持。方法重载(overloading)