自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

转载 flutter-Dart语言简介

Dart语言简介在之前我们已经介绍过Dart语言的相关特性,读者可以翻看一下,如果你熟悉Dart语法,可以跳过本节,如果你还不了解Dart,不用担心,按照笔者经验,如果你有过其他编程语言经验,尤其是Java和JavaScript的话,所以,如果你是前端或Android开发者,那么将会非常容易上手Dart。当然,如果你是iOS开发者,也不用担心,dart中也有一些与swift比较相似的特性,如命...

2019-03-14 15:35:52 1112 1

原创 ReactiveObjc 初体验

ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架。RAC结合了函数式编程(Functional Programming)和响应式编程(React Programming)的框架,也可称其为函数响应式编程(FRP)框架 。作用RAC最大的优点是 提供了一个单一的、统一的方法去处理异步的行为,包括 Delegate,Blocks Callbacks,...

2018-03-16 21:45:01 1069

原创 Swift4.0学习之路10-Swift中的函数的使用

Swift中的函数相当于OC中的方法Swift中函数的格式 func 函数名(参数列表) ->返回值类型{  代码块 return 返回值   }常见的函数类型:// 1.无参数,无返回值类型 箭头和void都可以省略func test() -> Void{ }// 2.无参数,有返回值func test() -> Int{ return 10;}...

2018-03-15 09:57:41 451

原创 SDWebImage 是如何保证线程安全的?

如果你曾经使用Objective-C做过并发编程,那你肯定见过@synchronized这个结构。@synchronized这个结构发挥了和锁一样的作用:它避免了多个线程同时执行同一段代码。和使用NSLock进行创建锁、加锁、解锁相比,在某些情况下@synchronized会更方便、更易读。SDWebImage就是使用了@synchronized来保证线程安全的内部使用@synchronized来...

2018-03-14 19:05:33 1222

转载 SDWebImage的一些注意点

SDWebImage的一些注意点删除缓存文件的两个方法clearMemory/clearDisk: 对应的clear方法clearMemory: 清除当前内存中所有的缓存clearDisk: 删除磁盘缓存中的缓存文件夹, 然后在新建一个clearMemory/clearDisk: 清理所有的磁盘缓存先删除过期的文件, 然后计算剩余的缓存文件大小, 如果(currentSize > maxSi...

2018-03-14 18:45:51 930

原创 Swift4.0学习之路09-Swift中的元祖的使用

1.元组的介绍    元组是swift特有的,oc中并没有。它是一种数据结构,在数学中广泛运用。类似于数组或者字典。可以用于一组数据,组成元组类型的数据可以称之为“元素”。2.元组的定义// 1.定义一个不可变元组let tupleC = (1,2,3)// 2.定义一个可变元组var tupleM = ("yinguoqiang",27,178.0)// 3.定义一个任意类型的元组...

2018-03-13 13:33:10 904

原创 Swift4.0学习之路08-Swift中的字典的使用

swift中字典是由两部分组成,key和value。字典允许按照某个键来访问元素。key集合不能重复,但是value集合是可重复的// 1.定义一个不可变字典let dictC = ["a" : 1,"b" : 2]// 2.定义一个可变字典 此处也根据类型推导来省略Dictionary<String,Any>var dictM: Dictionary<String,In...

2018-03-13 12:53:03 2838

原创 Swift4.0学习之路07-Swift中的数组的使用

1.在ios开发中,数组经常用到,今天我们就来说说数组// 1.定义一个不可变数组let arrayC = [1,2,3]// 2.定义一个可变数组// 2.1 定义一个任意类型的数组//var arrayM = Array<T>()var arrayM = Array<Any>()// 2.2 定义一个int类型的数组var arrayM2 = [3,...

2018-03-13 12:05:12 979

原创 Swift开发中的Any和AnyObject 以及泛型的区别

摘要:我们都知道泛型、Any和AnyObject都是用于表示类型的随意性,甚至还有OC中的id类型,但是它们具体有什么不同呢?我们就来具体了解一下Any和AnyObject概括来说AnyObject用于任何类(class)的实例,而Any可以用于表示任何变量,包括各种基本类型、值类型以及实例。而在swift中,枚举类型和结构体(例如Array和Dictionary)都属于值类型,因而不能用AnyO...

2018-03-13 11:44:03 1895

原创 一张图快速适配iphone-x

2018-03-13 11:18:31 802

原创 Swift4.0学习之路06-Swift中的字符串的使用

<一>字符串OC的字符串是一个对象:        0.NSString(不可变的),NSSMutableString(可变的)        1.获取字符串长度:str.lengthSwift的字符串是一个结构体:        0.let str = "不可变字符串"; var str = "可变字符串"        1.swift的字符串支持遍历        2.获取字符串长...

2018-03-12 23:21:37 384 1

原创 Swift4.0学习之路05-Swift中的for循环基本使用

OC中的for循环写法:for (int i = 0;i < 100;i++) { NSLog(@"i=%zd",i); }Swift中的for循环写法:let a = 100;for i in 0 ..< a { print("a=\(i)");}Swift中for循环不需要i的写法:let a = 100;for _ in 0..<a {...

2018-03-12 22:05:23 5853 2

原创 Swift4.0学习之路05-Swift中的guard基本使用

Swift中又新增了一个逻辑分支guard,是swift2.0新增的语法,它与if非常相似,它设计的目的是提高程序的可读性,并且不满足条件的可即时return。注意事项: 1.guard必须使用在函数内部                2.guard必须带有else语句,语法格式如下:                    当条件表达式为true时,跳过else中的内容,执行后面的内容      ...

2018-03-12 21:42:55 2059

原创 Swift4.0学习之路04-Swift中的基本运算

OC:有隐式转换,所以允许不同类型的数据进行运算。Swift:没有隐式转换,必须指明类型后才能运算。        1.算数运算符:+ - * / +=(swift中的++变成了+=) -=(swift中的--变成了-=)        2.关系运算符: > < >= <= == !=         3.赋值运算:= +=  -= /= *=        4.逻辑运算:...

2018-03-12 21:16:16 191

原创 Swift4.0学习之路03-Swift中的基本数据类型、类型转化、类型推导

Swift 中的数据类型:整型、浮点型、对象类型、结构体类型等等1.整型             有符号:Int8:有符号的8位整数                       Int16:有符号的16位整数                       Int32:有符号的32位整数                       Int64:有符号的64位整数                    ...

2018-03-12 21:00:41 818

原创 Swift4.0学习之路02-Swift中的变量&常量

定义格式(注意:【】内可以省略):    常量:let 常量名称【:常量类型】= 值    变量:var 变量名称【:变量类型】= 值注意事项:1.必须指明是常量还是变量               2.变量名称可以是汉字或unicode字符               3.可以省略类型:swift中有类型推导机制,会自动根据值推导出相应的类型               4.常用option键来...

2018-03-12 19:47:50 218

原创 Swift4.0学习之路01-Swift初体验

Swift,苹果于2014年在苹果开发者大会发布的新开发语音,可与OC共同运行于Mac OS 和ios平台,用于搭建基于苹果平台的应用程序。之前Swift一直不稳定,看过书,读过blog,今天开始,我以对比(OC:Swift)的形式将swift中常见的语法,以及注意事项,欢迎大家跟我一起学习Swift。// 1.导入框架// OC导入框架 #import <UIKit/UIKit.h&...

2018-03-12 19:30:02 325

原创 mac 下git常用命令

通过一个需求来精通git的常用命令将本地的项目上传到远程代码仓库,并且打上标签,标签打错了,重新修改标签步骤:1.创建远程代码仓库2.初始化本地仓库 git init  本地仓库分为:暂缓区 和 master分支3.将本地代码添加到暂缓区 git add.4.将暂缓区代码提交到master分支 git commit5.给本地代码仓库和远程代码仓库添加关联 ,查看

2018-01-08 10:50:43 3378

转载 ios-GCD信号量

信号量是一个整数,在创建的时候会有一个初始值,这个初始值往往代表我要控制的同时操作的并发数。在操作中,对信号量会有两种操作:信号通知与等待。信号通知时,信号量会+1,等待时,如果信号量大于0,则会将信号量-1,否则,会等待直到信号量大于0。什么时候会大于零呢?往往是在之前某个操作结束后,我们发出信号通知,让信号量+1。说完概念,我们来看看GCD中的三个信号量操作:dispa

2017-11-23 20:44:50 913

原创 kvo 观察者模式底层深究

KVO,观察者模式,添加观察者,监听被观察者对象属性,最后要移除观察者使用方法:- (void)viewDidLoad { [super viewDidLoad]; _person = [Person new]; _person.name = @"old"; [_person addObserver:self forKeyPath:@"nam

2017-11-18 20:07:48 294

原创 ios 通过runtime 获取类对象的所有子类

- (NSArray *)findSubClass:(Class)defaultClass{    int count =objc_getClassList(NULL,0);        if (count <=0) {        return [NSArrayarray];    }    NSMutableArray *output = [NSMu

2017-11-18 19:59:53 2396

原创 KVC 底层原理

KVC: key value coding 键值编码 :可以通过kvc 对对象的属性进行存取操作valueForkey 先找对象的相关方法,在找对象的相关变量1. 先找对象的相关方法,如果相关方法找不到2.那么去判断accessInstanceVariablesDirectly ,是否返回yes (如果不让外界通过kvc的方式访问你的私有变量可以将类方法的accessInstanceV

2017-11-18 19:04:45 390

原创 ios架构之-viper模式

VIPER 是一个创建 iOS 应用简明架构的程序。VIPER 可以是视图 (View),交互器 (Interactor),展示器 (Presenter),实体 (Entity) 以及路由 (Routing) 的首字母缩写。简明架构将一个应用程序的逻辑结构划分为不同的责任层。VIPER 的主要部分是: 视图:根据展示器的要求显示界面,并将用户输入反馈给展示器。

2017-10-21 16:04:02 1126

原创 UITableView 优化

说到UITableView优化,大家第一反应肯定是缓存池机制,在这我就不介绍缓存池机制了,主要说优化的事情1. 在这想问问tableView的数据源方法都有那些?代理方法都有哪些?很简单,凡是返回cell、heard或footer 都是数据源方法高度什么的都是代理方法2.tableview这些方法的执行顺序?首先,tableview继承scrollview,那么首先要知

2017-10-19 22:38:17 291

原创 ios开发中对block 的理解

在ios开发中,block使用十分重要,熟练掌握block的各种操作,可以避免很多错误。1.开发中,如果在block中想要修改外部的成员变量,那么需要将这个成员变量用__block修饰就可以了2.开发中,如何避免循环引用?如何避免出现僵尸对象?如何避免出现野指针呢?用__weak修饰就可以了,为什么呢?__weak是弱引用,对象释放时,对象的属性也就释放了,不会调用一个已经释放了的对象的属

2017-10-16 18:36:18 252

原创 SDWebImage底层的实现

SDWebImage底层的实现其实也就是图片缓存的解决方案之一,下面是干货咯1.加载图片前有个图片的唯一标示,也就是图片在服务器的地址我们暂且叫做图片url,根据图片url去imageCache缓存文件夹查看是否有这张图片,有就显示2.如果imageCache图片缓存中没有,就去沙盒里看看有没有,如果存在把图片添加在图片缓存的文件夹(imagecache)中3.沙盒不存在显示占位图片,

2017-10-16 18:26:36 297

原创 ios-runtime理解

好多童鞋问我runtime,今天我就说说我对runtime的理解runtime的使用:1.发送消息 objc_msgSend 要给对象发消息就用这个函数,其实通知的底层实现也是这个函数,首先所有的观察者会被添加到一个链表中,当对象某个属性改变后会对这个链表中的观察者发送消息,也是通过这个函数来实现的。2.交换方法 class_getClassMethod(获取方法地址) method_

2017-10-16 18:14:04 302

原创 ios-多线程的理解

最近面试的时候,好多人问多线程。上来就说说你对多线程的理解。我直接想反问他对ios的理解。一般我们都回答:NSThread,NSOperation, GCD 这3中方式,还有一种是c的,我没用过,在这也不谈啦,以防面试的时候翻车。1.NSThread一般跟NSRunLoop一块用,应用场景就是倒计时吧,暂时没想到其他的。2.NSOperation应用场景举个例子吧,比如,请求依赖关系,

2017-09-18 09:54:29 584

原创 android开发之-相对布局的属性

// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的控件之上;android:layout_below 将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf    将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf  将该控件的左边缘与给定ID的控件右边缘对齐; 

2016-06-29 12:44:15 3627

原创 ios 发布应用程序

1.打开appledevelope后创建appid,因为证书是基于appid创建的。这个appid就是你的bundleid,是应用的唯一表示 2.创建发布证书,这个证书是基于上部创建的appid。3.创建配置文件,也可叫做许可文件,这个文件跟证书是匹配用的.4.安装证书,双击下载的证书即可,就安装到电脑的钥匙串中了5.在项目中的target中的buildcodesign中选择你刚才

2016-02-16 11:16:38 418

翻译 PDF数字签名之(6.2如何生成公钥)

PDF文档的数字签名功能的设计与所有相关的标准的兼容性主流的公钥基础设施(PKI)部署在企业和政府的设置。PKI是集人,政策,程序,硬件,软件,用于创建,分配,管理和撤销,并使用数字标识包含公钥/私钥对用在签署PDF。在PDF签名的工作流程中,“PKI”一般是指数字ID发行,用户,管理员,以及在这些工作流程中使用的任何硬件或软件。PDF阅读器和实施符

2016-01-25 10:45:35 2333

翻译 PDF文件中的数字签名之(在一个PDF文件的签名代表)

原文地址:https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/Acrobat_DigitalSignatures_in_PDF.pdf本文是自己无聊时候翻译的,如果有错误,请指出。本文档介绍了如何在一个PDF文档的数字签名和什么代表签名的相关特征的PDF语言支持。Adobe阅读器和Acrobat®有®®实现了所有P

2016-01-25 10:41:13 9900 1

原创 ios UITextView 插入图片和文字自适应高度

1,首先自定义一个textView继承UITextview2.重写textview 的contentsize方法- (void)setContentSize:(CGSize)contentSize{ CGSize oriSize = self.contentSize; [super setContentSize:contentSize]; if(oriSize.h

2016-01-13 10:39:40 2993

原创 ios 9.1以后 添加libz.dylib 方法

1. 进入你项目的build phases 2.点击+号在弹出的对话框选择addother3.在弹出的对话框中输入"cmd"+"shift"+"g" 4.输入/usr/lib5.这个时候滑动到最下面就能看到libz.dylib了

2015-11-25 19:07:23 9550

原创 android 数据存储二使用文件存储数据

核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选:             MODE_PRIVATE:为默认操作模式

2015-11-14 15:15:05 599

原创 android 数据存储一SharedPrenference存储简单数据

使用SharedPrenference 存储数据类似ios 的偏好设置存储数据适用范围:保存少量的数据,且这些数据的格式非常简单:字符串类型,基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等。核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS 的file explo

2015-11-14 13:17:05 1380

转载 iOS 9 适配系列教程

转自:http://www.cocoachina.com/ios/20150703/12392.htmlDemo1_iOS9网络适配_改用更安全的HTTPSiOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL。采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation 框架下的相关网络请求,将不

2015-11-02 15:50:44 530

转载 Activity的生命周期

在Android中,Activity的生命周期一直是 比较重要的知识点,即使是在面试中也经常被问到。网上已经有很多人写过介绍此内容的文章,本文只是自己的总结笔记,便于以后翻阅。首先上图:上面那张让人看起来很爽的图就是官方文档中关于Activity生命周期的演示图,Activity共有七个生命周期方法,分别为:[c-sharp] view plaincop

2015-10-28 14:35:45 551

原创 android.util.Log常用的方法

android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。一>Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");二>Log.d的输出颜色是蓝色的,仅

2015-10-28 14:27:57 3452

转载 深入理解android view 生命周期

首先来看三分 创建view 的 日志信息 (自定义View 配置到xml文件中):android:visibility=gone ?1234567891003-2519:56:55.934: D/yyyyy(11493): onVisi

2015-10-28 14:18:48 620

空空如也

空空如也

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

TA关注的人

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