自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

viiimaus的博客

生命不止,折腾不息

  • 博客(89)
  • 资源 (11)
  • 收藏
  • 关注

原创 NEST预言机-获取链上价格

文章目录NEST预言机-获取链上价格介绍尝试获取链上价格了解机制代码解析增加价格修改价格获取价格(最新)链下获取价格(最新价格)激活调用权限DEMO官方文档CoFixNEST预言机-获取链上价格介绍NEST预言机采用双边报价机制生成链上价格,质押双边资产来保证价格的准确性。是完全去中心化的链上价格生成机制。白皮书:https://nestprotocol.org/doc/zhnestwhitepaper.pdfgithub:https://github.com/NEST-Protocol详细的

2020-11-09 17:19:37 1164 6

原创 基于DYDX闪电贷在Cofix和Uniswap之间套利

文章目录基于DYDX闪电贷在Cofix和Uniswap之间套利相关项目CofixUniswapNEST流程套利合约核心方法1.WETH兑换成ETH2.ETH 在Cofix中兑换成USDT3.USDT 在Uniswap中兑换成ETH4.ETH兑换成WETH注意事项基于DYDX闪电贷在Cofix和Uniswap之间套利由于在以太坊中的交易属性,在一笔交易中可以借出大量资金进行操作(不能超过gaslimit限制)。所以当各个交易平台有利差的时候可以进行套利(无风险套利),避免了准备大量资金。相关项目Cof

2020-11-04 17:33:27 3891 12

原创 下载视频并保存至手机相册

功能介绍:需要将转码后的视频(小于20MB),通过APP下载至手机相册,可以将小视频分享至微信传播。1.通过服务器转码视频,或者很多云服务商都会提供这个功能。2.通过APP下载至手机相册,这个是咱们需要做的事。主要技术:用到 URLSession 和 URLSessionDownloadDelegate1.创建 session 下载任务 并执行(由于下载的视频比较小,所有就不用分段

2017-12-15 09:23:42 7527

原创 iOS 11 Swift-导航&状态栏&tableview适配

iOS 11运行项目变成了这个样。。总结几个点:1.状态栏重叠,字体颜色需要白色不是黑色。2.导航栏上移了20个点。3.tableview 上下都有空白。开工,一、首先解决状态栏问题。1.infoplist中设置View controller-based status bar appearance 值为NO。2.在appdelegat

2017-10-11 15:27:16 3430 2

原创 Swift中Timer计时器循环引用问题

老问题,和OC写法差不多。用计时器发现deinit方法不走,页面有内存泄漏,而且计时器关不掉。deinit { // 销毁计时器 timer?.invalidate(); }可以在特定节点主动调用timer?.invalidate();但是并不完美~~简单说下问题点:self对自己的计时器属性timer强引用,timer设置target:self,

2017-08-22 11:58:42 2121 1

原创 写高质量OC代码52建议总结:52.NSTimer会保留其目标对象

计时器需要和“运行循环”相关联,如下: + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; 用这个方法创建计时器,会在指定时

2017-07-30 20:51:30 344

原创 写高质量OC代码52建议总结:51.load和initialize

有时候,类必须先执行某些初始化操作才能正常运行,先说下load方法: +(void)load 加入运行期系统中的每个类及分类必定会调用此方法,只调用一次(在程序启动的时候)。如果类和所属的分类都定义了load方法,先调用类中的,再调用分类中的。 load方法的问题在于,执行的时候系统处在“脆弱时期”,执行子类load之前必定会执行超类load,代码如果依赖了其他类,相关类中的load方

2017-07-28 16:18:04 447

原创 写高质量OC代码52建议总结:50.构建缓存时选用NSCache而非NSDictionary

NSCache胜过NSDictionary之处在于,当系统资源耗尽时,他可以自动删减缓存,用字典就得自己写挂钩,系统低内存时手工删减,十分复杂。 NSCache不会“拷贝”键而是“保留”,这个点字典也能实现但是很复杂(49条~)。很多时候键都是由不支持拷贝的对象充当的,这点用起来比字典方便。NSCache是线程安全的,多个线程可以同时访问NSCache。 可以控制缓存删减的实际,有两个参数

2017-07-28 14:39:10 916

原创 写高质量OC代码52建议总结:49.对自定义其内存管理语义的collection使用无缝桥接

OC系统库包含相当多的collection类,其中各种数组、字典、set。CoreFoundation框架也定义了一套C语言的API,操作这些collection及数据结构。Foundation中的NSArray和CoreFoundation中的CFArray是等价的。两种创建数组的方式可能有区别,“无缝桥接”技术可以在两个类型之间转换。 CFArray要通过CFArrayRef来引用,而这是

2017-07-28 11:46:59 425

原创 写高质量OC代码52建议总结:48.多用块枚举,少用for循环

以下是for循环针对NSArray,NSSet,NSDictionary的遍历。字典和set都是无序的,无法根据特定的整数下标直接访问其值。遍历set和dictionary都需要而外创建数组储存对象和key。这个中介数组增加了不必要的而外开支。-(void)demoforArray{ NSArray *anArray = /***/; for (int i = 0; i < a

2017-07-27 17:09:37 639

原创 写高质量OC代码52建议总结:47.熟悉系统架构

将一系列代码封装为动态库,并放入描述接口的头文件,这种东西叫做框架。为iOS平台开发的第三方框架所使用的是静态库(static library),因为iOS应用程序不允许在其中包含动态库。 Cocoa Touch 里面继承了一批创建应用程序时经常用到的框架。 Foundation框架,NSObject, NSArray, NSDictionary等类都在其中。还提供了字符串处理的功能,NS

2017-07-27 11:47:46 487

原创 写高质量OC代码52建议总结:46.不要使用dispatch_get_current_queue

使用GCD的时候经常要判断当前代码是在哪个队列上执行的,会发现有下面这个函数: dispatch_queue_t dispatch_get_current_queue(); iOS 6.0开始已经弃用这个函数了,它检测当前队列是不是某个特定的队列。-(NSString *)someString { __block NSString *localSomeString; d

2017-07-27 10:01:49 2753

原创 写高质量OC代码52建议总结:45.使用dispatch_once来执行只需要运行一次的线程安全代码

单例模式,该方法只会返回全类共用的单例实例,不会每次调用都创建新的实例。@implementation EOCClass +(id)sharedInstance { static EOCClass *sharedInstance = nil; @synchronized(self) { if (!sharedInstance) { sh

2017-07-26 11:11:46 658

原创 写高质量OC代码52建议总结:44.通过Dispatch Group机制,根据系统资源状况来执行任务

dispatch group能够把任务分组。等待这组任务执行完毕,在回调函数中继续往下执行。比如,可以把压缩一系列文件的任务表示成dispatch group: dispatch_group_tdispatch_group_create(); 有两种方法给任务编组。 void dispatch_group_async(dispatch_group_t group, dispatch_que

2017-07-25 17:19:11 431

原创 写高质量OC代码52建议总结:43.掌握GCD及操作队列的使用时机

执行后台任务时,GCD并不一定是最佳方式。NSOperationQueue,可以把操作以NSOperation子类的方式放在队列中,也能够并发执行。从iOS 4和Mac OSX 10.6开始,操作队列是在底层用GCD来实现的。 差别:GCD是纯C的API,操作队列是OC的对象。GCD任务用块表示,操作队列是更为重量级的OC对象。但是GCD并不总是最佳方案,有时采用对象所带来的开销微乎其微。

2017-07-25 14:59:49 401

原创 写高质量OC代码52建议总结:42.多用GCD,少用performSelector系列方法

有几个方法可以推迟执行方法调用,也可以指定运行方法。这些功能原来很有用,但是现在有个大中枢派发和块则应该避开。 -(id)performSelectoer:(SEL)selector 下面两行代码执行效果相同: [object performSelector:@selector(selectorName)]; [object selectorName]; 看上去这个方法有点多余,如果

2017-07-25 13:20:50 371

原创 写高质量OC代码52建议总结:41.多用派发列队,少用同步锁

如果有多个线程要执行同一份代码,有时会出问题。对数据的读写时机不可控。通常要使用锁机制来实现同步。有两种办法。 -(void)synchronizedMethod { @synchronized(self) { // safe } } 这种方式会根据给定的对象,自动创建一个锁,等块中的代码执行完成,锁就释放。例子中的对象都是self,这样可以保证每个self

2017-07-24 17:48:28 716

原创 C++自学之路:3.1-简单变量

#include #include int main(int argc, const char * argv[]) { using namespace std; int n_int = INT_MAX; short n_short = SHRT_MAX; long n_long = LONG_MAX; long long n_llo

2017-07-18 18:59:19 548

原创 写高质量OC代码52建议总结:40.用块引用其所属对象不要出现保留环

#import typedef void(^EOCNetworkFetcherCompletionHandler)(NSData *data);@interface EOCNetworkFetcherTwo : NSObject@property (nonatomic, strong, readonly) NSURL *url;-(id)initWithURL:(NSURL *)ur

2017-07-14 18:05:00 449

原创 C++自学之路:2.5~2.6-总结、复习题

总结:1.C++程序是由一个或多个函数模块组成的。函数由函数头和函数体组成,函数头指出函数的返回值类型和参数类型。2.类是用户定义的数据类型规范,它描述了如何表示信息以及可以对数据执行的操作。对象是类的实体。3.C++提供了两个用于输入输出的函数,cin、cout,他们是iostream和ostream类的实体。4.C++可以使用大量的C库函数。使用函数前,先引入包含函数原型的

2017-07-13 21:52:22 353

原创 C++自学之路:2.4--函数

#include #include int main(int argc, const char * argv[]) { using namespace std; double area; cout << "Enter the floor area, in square feet, of your home: "; cin >> area;

2017-07-12 22:54:42 561

原创 写高质量OC代码52建议总结:39.用handler块降低代码分散程度

iOS系统上有个“系统监控器”,如果程序在一定时间内无响应,就会被自动终止。所以,在处理用户界面的显示及触摸操作所用的线程(主线程)不能因为要执行I/O或者网络通信这类耗时的任务而阻塞。异步方法在执行完任务后,需要以某种手段通知相关代码。常用的手段是设计委托代理。当相关事件发生时就可以通知对象执行相关操作了。#import @class EOCNetworkFercher;@prot

2017-07-12 14:36:05 399

原创 C++自学之路:2.3--其他C++语句

#include int main(int argc, const char * argv[]) { using namespace std; int carrots; cout << "How many carrots do you have?" << endl; cin >> carrots; carrots = carrots

2017-07-11 21:55:39 598

原创 写高质量OC代码52建议总结:38.为常用的块创建typedef

例: ^(Bool yesOrNo, int index){ if yesOrNo { return index * 2; } else { return index * 3; } }  如果将block赋值给变量:  int (^hahaBlock)(Bool yesOrNo, int index) = ^(Bool ye

2017-07-11 08:57:48 278

原创 C++自学之路:2.2--C++语句

#include int main(int argc, const char * argv[]) { using namespace std; int carrots; carrots = 25; cout << "I have "; cout << carrots; cout << " carrots."

2017-07-10 22:52:16 485

原创 swift3.1:获取用户授权显示通知(iOS 10)

swift3.1:获取用户授权显示通知(iOS 10)

2017-07-07 16:27:02 946

原创 写高质量OC代码52建议总结:37.理解“块”

块和函数类似,只是直接定义在另一个函数里,和定义它的函数共享同一个范围里的东西。用“^”来表示。 ^{ //block }; 块和int,float或其他对象一样,可以作为一个值赋给变量并使用。块类型的语法和函数指针类似。 void (^someBlock)() = ^{ //block }; 块类型的语法结构: return_type (^block_name)(

2017-06-28 13:03:27 317

原创 写高质量OC代码52建议总结:36.不要使用retainCount

OC通过引用计数来管理内存。其值表明还有多少个对象希望此对象继续存活。对象创建后,其保留计数大于0.保留与释放操作会使该计数递增和递减,当引用计数变为0时,系统回收对象。 ARC中已经将此方法废弃。 1.它所返回的引用计数只是某个时间点上的值。该方法并没有考虑到稍后系统会把自动释放池清空,因而不会将后续的释放操作计算到数值里。这样,就未必能反映真实的计数了。 2.retainCount

2017-06-27 13:37:17 375

原创 写高质量OC代码52建议总结:35.用僵尸对象调试内存管理问题

向已回收的对象发送消息是不安全的。具体是否可行看具体情况,取决于对象所占用的内存是否被其他内容覆写。但这无法确认。在程序没有崩溃的情况下,那块内存可能只复用了其中一部分,对象中的某些二进制数据依然有效。还有一种可能,就是那块内存恰好被另外一个有效且存活的对象所占据。在这种情况下,运行期系统会把消息发送到新对象那里,如果新对象无法响应方法,程序依然会崩溃。Cocoa提供了“僵尸对象”,启

2017-06-27 11:36:41 499

转载 Masonry介绍与使用实践

Masonry 源码:https://github.com/Masonry/MasonryMasonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。我们先来看一段官方的sample code来认识一下Masonry[view1 mas_makeConstraints:^(MASCon

2017-06-01 11:45:28 447

原创 写高质量OC代码52建议总结:34.以“自动释放池块”降低内存峰值

释放对象的方式有两种,一种是使用release,另一种是调用autorelease,将其加入自动释放池。自动释放池用于存放那些需要在稍后某个时刻释放的对象。清空自动释放池时,系统会向池中的对象发送release消息。 如果在没有创建自动释放池的情况下给对象发送release消息,控制台会输出警告消息。一般情况下不需要担心自动释放池的问题。系统会自动创建一些线程,这些线程默认都有自动释放池,每次

2017-05-11 09:16:17 358

原创 写高质量OC代码52建议总结:33.以弱引用避免保留环

几个对象都以某种方式互相引用,从而形成保留环。由于OC内存管理模型使用引用计数架构,所以这种情况通常会导致内存泄漏,因为最后没有别的对象会引用环中的对象。环里的对象将永久存活,不会被系统回收。避免保留环的最佳方式就是弱引用,即“非拥有关系”。OC中有一项与ARC相伴的运行期特征,可以令开发者安全的使用弱引用,weak,它和unsafe_unretained的作用完全相同。只要系统把属性回收,属

2017-05-04 08:55:08 350

原创 写高质量OC代码52建议总结:32.编写“异常安全代码”时留意内存管理问题

纯C没有异常,而C++和OC都支持异常。当前运行期系统中,C++与OC的异常相互兼容。 异常只应在发生严重错误后抛出,虽说如此,有时仍然需要编写代码来捕获并处理异常。比如使用OC编码时,或者编码中用到了第三方程序库而此程序库所抛出的异常又不受你控制时,就需要捕获及处理异常了。 在try块中,如果先保留了某个对象,然后在释放它之前抛出了异常,除非catch快能处理此问题,否则对象做占用的内存

2017-05-03 17:19:08 578

原创 写高质量OC代码52建议总结:31.在dealloc方法中只释放引用并解除监听

对象在经历其生命周期之后最终会被系统回收,这时需要执行dealloc方法。在每个对象的生命周期内,此方法在保留计数降为0时只执行一次。绝不该自己调用dealloc方法,系统会在运行期适当的时候调用它。一旦调用了dealloc方法后,对象就不再有效了。 在dealloc方法中,ARC会自动生成.cxx_destruct方法并自动添加。对象所拥有的其他非OC对象也要释放,比如CoreFoundat

2017-05-03 13:09:15 2143

原创 写高质量OC代码52建议总结:30.以ARC简化引用计数

if ([self shouldLogMessage]) { NSString *message = [[NSString alloc] initWithFormat:@"I am object, %p", self]; NSLog(@"message = %@", message); } 这段代码采用手动管理内存的方式,存在内存泄露的问题。if语句块末尾并没有释放message

2017-04-28 09:47:29 3621

原创 写高质量OC代码52建议总结:29.理解引用计数

c使用引用计数来管理内存,可加减。想让某个对象继续存活,就增加其引用计数,用完了就递减。引用计数为0时,表示没人继续使用该对象,就可以销毁了。 “垃圾回收机制”在MAC OS X 10.8之后废弃,在IOS上从未支持过“垃圾回收机制” Retain     递增保留计数 release    递减保留计数 autorelease    稍后清理“自动释放池”时,再递减保留计数

2017-03-29 14:43:02 604

原创 Swift3.0 -- 错误处理 try

import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let jsonString = "{\"name\":\"zhang\"}"; let data = jsonS

2017-03-15 08:19:18 6249

原创 NSClassFromString 创建视图控制器

//// LYKMainViewController.m// MeiPaiPai2.0//// Created by meipaipai on 17/3/7.// Copyright © 2017年 meipaipai. All rights reserved.//#import "LYKMainViewController.h"@interface LYKMainVi

2017-03-07 14:55:43 842

转载 IOS 开发中判断字符串是否为空字符的方法

- (BOOL) isBlankString:(NSString *)string { if (string == nil || string == NULL) { return YES; } if ([string isKindOfClass:[NSNull class]]) { return YES; } i

2017-03-07 09:35:54 661

原创 写高质量OC代码52建议总结:28.通过协议提供匿名对象

协议定义了一系列方法,遵从协议的对象应该实现它们。我们可以用协议把自己写的API隐藏自来,将返回的对象设计为遵从协议的id类型。想要隐藏的类名就不会出现在API中了。如果接口背后有多个不同的实现类,而你又不想指明具体使用哪个类,可以考虑用这个办法,因为有时候这些类可能会变。 @property (nonatomic, weak) iddelegate; 由于该属性是id,所以任何类的对象都

2017-03-03 14:31:41 877

多线程编程指南

多线程编程指南

2017-08-11

计算机程序设计艺术(中文版)第三卷:排序与查找

计算机程序设计艺术(中文版)第三卷:排序与查找

2017-06-05

计算机程序设计艺术(中文版)第一卷:基本算法

计算机程序设计艺术(中文版)第一卷:基本算法

2017-06-05

计算机程序设计艺术(中文版)第二卷:半数值算法

计算机程序设计艺术(中文版)第二卷:半数值算法

2017-06-01

iOS20个精品源码(二)

iOS20个精品源码(二)

2017-03-30

iOS20个精品源码(一)

iOS20个精品源码(一)

2017-03-30

The Swift Programming Language 中文版 - v1.8

The Swift Programming Language 中文版 - v1.8

2017-02-17

object-c.2.0程序设计

object-c.2.0程序设计

2017-02-14

OS X与IOS内核编程

OS X与IOS内核编程

2017-02-06

Objective-C编程之道:IOS设计模式解析

Objective-C编程之道:IOS设计模式解析

2017-02-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除