delegate

iOS开发——内存优化

家住魔仙堡 提交于 2020-08-08 04:56:41
前言: 当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发解决这些性能问题也成为我们测试的重要工作。凑巧最近一段时间就一直在协助开发去进行app内存优化。这里整理了一份关于内存优化的心得分享给大家。 目的: 首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动管理了。编写代码的时候很容易忘掉结尾的release。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 2. 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells设置正确的reuseIdentifier。 为了性能最优化,table

EOS基础全家桶(十五)智能合约进阶2

筅森魡賤 提交于 2020-08-07 19:40:19
简介 今天我们继续补充智能合约的进阶使用技巧,这次的主题是交易,合约内我们除了可以发起内联action的调用,很多使用还需要直接调用其他的合约action或者以交易的形式调用自身的action。 发起交易/延时交易 在合约内可以非常方便的发起一个交易,无论是调用外部的合约action还是调用自身的,都很容易。 这里可能你会有疑问,为何调用自身的action要通过发起交易的方式呢?一个最主要的原因是需要有交易记录,如果直接作为内联方法调用了,链上是看不到直观的记录的,而我们通过区块链浏览器查看交易时,是需要有交易记录或者交易通知的,才能被查询到。 构建交易 我们首先要引入 #include <eosio/transaction.hpp> ,然后我们来看下面这个代码示例,这段代码来自系统合约eosio.system中delegate_bandwidth.cpp中changebw方法,这个方法在进行资源带宽的抵押和赎回的时候都会调用。而下面的煮这段代码,是调用合约自身的refund退款方法,即在赎回时需要等待3天的赎回期,3天后退款交易会被执行,然后我们赎回的资源就能转账到我们的账户了。 //构建一个transaction eosio::transaction out; //配置action,包括了权限、合约、action名称和参数 out.actions.emplace_back(

C# JSON字符串首字母转大写

笑着哭i 提交于 2020-08-07 19:12:44
原文: C# JSON字符串首字母转大写 /// <summary> /// Json字符串首字母转大写 /// </summary> /// <param name="strJsonData"> json字符串 </param> /// <returns></returns> public static string UpperFirst( string strJsonData) { MatchCollection matchCollection = Regex.Matches(strJsonData, " \\\"[a-zA-Z0-9]+\\\"\\s*: " ); foreach (Match item in matchCollection) { string res = Regex.Replace(item.Value, @" \b[a-z]\w+ " , delegate (Match match) { string val = match.ToString(); return char .ToUpper(val[ 0 ]) + val.Substring( 1 ); }); strJsonData = strJsonData.Replace(item.Value, res); } return strJsonData; } 来源: oschina 链接: https:/

使用PInvoke互操作,让C#和C++愉快的交互优势互补

北城余情 提交于 2020-08-07 13:24:23
一:背景 1. 讲故事 如果你常翻看FCL的源码,你会发现这里面有不少方法借助了C/C++的力量让C#更快更强悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCodeSecurity] private static extern bool InternalUseRandomizedHashing(); [DllImport("mscoree.dll", EntryPoint = "ND_RU1")] [SuppressUnmanagedCodeSecurity] [SecurityCritical] public static extern byte ReadByte([In] [MarshalAs(UnmanagedType.AsAny)] object ptr, int ofs); 联想到上一篇阿里短信netsdk也是全用C++实现,然后用C#做一层壳,两者相互打辅助彰显更强大的威力,还有很多做物联网的朋友对这种.Net互操作技术太熟悉不过了,很多硬件,视频设备驱动都是用C/C++实现,然后用winform/WPF去做管理界面,C++还是在大学里学过,好多年没接触了,为了练手这一篇用P/Invoke来将两者相互打通。 二

关于c#中委托使用小结

左心房为你撑大大i 提交于 2020-08-07 04:31:25
一、简述:   委托对与我们编程人员来说,一点都不陌生,在实际工作过程中,或多或少都应该是接触过   但是对与编程新手来说,对与委托的理解和使用应该还是一个坎,但是只要理解清楚了,这个坎也就过去了。   最近也经常有人在问关于委托的使用的相关问题,在此我花点时间,对与委托的个人理解进行一个总结,希望能够给大家有所帮助作用。 二、定义:   委托,其实在我们日常生活中,也经常用到委托的,比如:律师其实就是充当了一个委托的角色,当事人委托律师在法庭上对其诉讼辩护。   在c#中,委托简单的理解就是将一个方法以参数的形式传递到另外一个方法中去,有点类似于c++中的指针的概念。 三、实现委托的步骤:   在委托定义的时候,我们只需要定义一个结构体,至于具体的实现,需要在具体的委托方法中来实现。   实现委托的步骤,我总结如下:   其一、定义:要声明一个委托的结构体:delegate void Mydelegate(type1 para1,type2 para2);   其二、声明:声明就是要声明一个委托变量:Mydelegate myDel;   其三、实例化:就是要对声明的委托对象实例化具体的委托方法:myDel=new Mydelegate(obj.InstanceMethod);   其四、参数传递:简单的理解,就是将委托以一个参数的形式传递给一个方法:MyMethod(myDel

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

扶醉桌前 提交于 2020-08-06 13:29:12
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)无装箱:

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

别等时光非礼了梦想. 提交于 2020-08-06 02:31:25
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)无装箱:

委托、匿名方法到lambda表达式

情到浓时终转凉″ 提交于 2020-08-05 13:02:42
在项目中我们经常会接触lambda表达式,操作简洁明了。帮我们省了不少事。面对这么神奇的一个东西,是不是也应该了解了解它的本质呢。 今天我们通过一步一步的演变揭开lambda表达式的本质 一.委托 C# 中的委托类似于 C 或 C++ 中函数的指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托的本质也跟类一样,是用户自定义的类型。类的定义是通过class关键字 ,而委托的定义是通过delegate来定义 class Program { static void Main( string [] args) { // 声明一个AddNum类型的变量a, AddNum a = new AddNum(Add); // 创建一个指向Add方法的委托对象 a( 2 , 3 ); // 调用a指向的方法 Console.WriteLine(a); // 打印a的类型,a(2,3)加上括号才是调用 Console.WriteLine(a( 2 , 3 )); } // 声明一个方法以便委托调用,要注意的是方法的签名要与委托声明的签名保持一致 public static int Add( int a, int b) { return a + b; } } // 声明一个委托,要注意的是委托跟类是同一级别的 delegate int AddNum( int a, int b)

在视图控制器之间传递数据

余生颓废 提交于 2020-08-05 04:24:10
问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view that acts as a data entry form and I want to give the user the option to select multiple products. 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项。 The products are listed on another view with a UITableViewController and I have enabled multiple selections. 这些产品在另一个带有 UITableViewController 视图中列出,并且我启用了多个选择。 My question is, how do I transfer the data from one view to another? 我的问题是,如何将数据从一个视图传输到另一个视图? I will be holding the selections on the UITableView in an array,

手把手教你阅读mybatis核心源码,掌握底层工作原理与设计思想

一笑奈何 提交于 2020-08-04 23:18:34
Mybatis目前作为互联网公司Java体系开源ORM框架的首选,它有着天然的优势,很多同学只关注其公司业务CRUD程序的编写,忽略了其源码阅读的重要性。下面来看一段使用Mybatis API写的代码示例: String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try { BusinessMapper mapper = session.getMapper(BusinessMapper.class); Business business = mapper.selectBusinessById(1); System.out.println(business); }finally { session.close(); } 接下来按照示例代码的步骤一步一步地来分析代码的运行背后的秘密,揭开mybatis源码的真实面目。给出的源码片段均有中文注释