自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 堆排序

堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节

2017-06-21 17:01:45 267

转载 [Mac OS/iOS]反汇编工具Hopper分析Crash Log

版权声明:本文为博主原创文章,未经博主允许不得转载。   在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使用。 强大的IDA大家可能已经知道,但它的Mac OS版本又让人回到了DOS时代。幸运的是Mac OS有了一个小巧的替代品:Hopper, 基本上满足了工作上的反汇编的需要,包括伪代码以及控制

2017-06-21 13:55:25 761

原创 算法分析-快速排序

今天我们来说说快速排序算法,快速排序,采用分治的思想,可以算是一种经典的算法 ,由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。在平均状况下,排序N个项目要 O(N*logN)次比较,在最坏的情况下,则需要比较O(n2)次比较。最好情况,每次划分所取的基准都是当前无序区的”中值”记录,划分的结果是基准的左、右两个无序子区间的长度大致相等。总的关键字比较次数:O(nlgn

2017-06-20 13:26:08 1876

转载 KVO 实现原理

addObserver:forKeyPath:options:context:各个参数的作用分别是什么, observer中需要实现哪个方法才能获得KVO回调?/** 1. self.person:要监听的对象 2. 参数说明: * @param addObserver 观察者,负责处理监听事件的对象 * @param forKeyPath 要监听的属性 * @p

2017-06-15 19:01:22 622

原创 method-swizzling 详解 和使用

简介在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现。每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。 我们可以利用 method_exchangeImplementati

2017-06-15 16:53:24 4055

原创 IOS Super的理解

IOS Super的理解 @implementation Son : Father - (id)init { self = [super init]; if (self) { NSLog(@”%@”, NSStringFromClass([self class]));

2017-06-14 13:39:59 2161

原创 GCD 和 NSOperation的区别

Mac OS X 10.6及iOS4.0之后导入了可以使全体线程更高效运行,并且使并行处理应用更易开发的架构,GCD(Grand Central Dispatch),同时引入的还有Run Loop,线程(包括Cocoa和POSIX)和Operation。GCD拥有非常轻量级的工作单元和并发方式,并且由系统决定其最佳调度方式。这个时候出现了一个问题,NSOperation如何处理呢?其实我们在通过N

2017-06-12 20:00:36 384

原创 算法分析 - 桶式排序

桶式排序 在我们生活的这个世界中到处都是被排序过的东东。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。特点 1.桶排序是稳定的 2.桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3.桶排序非 常快,但是同时也非

2017-06-12 19:12:20 399

转载 Objective-C Associated Objects 的实现原理

我们知道,在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,这似乎成为了 Objective-C 的一个明显短板。然而值得庆幸的是,我们可以通过 Associated Objects 来弥补这一不足。本文将结合 runtime 源码深入探究 Objective-C 中 Associated Objects 的实现原理。在阅读本文的

2017-06-10 19:50:10 282

原创 温故知新 算法的时间复杂度

算法的时间复杂度求解算法的时间复杂度的具体步骤是:  ⑴ 找出算法中的基本语句;  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。  ⑵ 计算基本语句的执行次数的数量级;  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重

2017-06-07 16:25:45 374

转载 TCP Header

这是 TCP/IP 系列的第二篇,阅读目标是建立对网络包结构的初步认识。上一篇里,我们提到一次完整的 TCP 会话其实是一个字节流,只不过我们可以按照一定的规则来切割这个字节流,从而划分出一个个的网络包。我们经常说抓包分析网络故障,这个抓包里所指的包在不同的语境下其实意义并不相同,首先我们得对包的构成形成具象的认知。再看七层协议刚毕业那会,大家都喜欢在简历上写「精通 TCP

2017-06-07 13:54:23 3063 2

原创 TCP 缓存区 window

什么是TCP WindowTCP Window可能是需要理解的数据传输过程里最重要的部分了, 尤其是对于数据中心而言, 因为备份工作是每天都要进行的. 在今天的数据中心中, 高带宽的高可用性和高速连接使得提供应用程序服务器和备份服务器之间的几个G吞吐量变得更容易了. 随着WAN(wide area network)连接增大, 更快, 更高效, 终端用户比从前能访问到更大的吞吐量.

2017-06-07 10:51:10 1547

转载 HTTPS 解析

因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全  非对称加密算法:RSA,DSA/DSS     在客户端与服务端相互验证的过程中用的是对称加密 对称加密算法:AES,RC4,3DES     客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密HASH算法:MD5,SHA1,SHA256  在确认握手消息没有被

2017-06-06 19:46:57 1565

转载 TCP/IP 理解 3

每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。大家都遵守的规则,就叫做"协议"(protocol)。互联网的每一层,都定义了很多协议。这些协议的总称,就叫做"互联网协议"(Internet Protocol Suite)。它们是互联网的核心,下面介绍每一层的功能,主要就是介绍每一层的主要协议。二、实体层我们从最底下的一层开始。电脑

2017-06-05 11:10:16 394

转载 TCO/IP 理解 2

层与协议每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。大家都遵守的规则,就叫做”协议”(protocol)。互联网的每一层,都定义了很多协议。这些协议的总称,就叫做”互联网协议”(Internet Protocol Suite)在这里主要讲述的是传输层的TCP、UDP协议,网络层的IP协议。至于应用层的Http协议等、链接层的以太网协议另

2017-06-05 10:51:37 2074

原创 C语言封装成object-c的过程,实现原理

前言做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象是怎么封装的?接下来我们就使用C语言来一部一部的实现这个封装。Object对象首先我们先封装一个Object对象,我们来分析一下:如果使用C来封装对象,我们就要用到结构体每一个Object都有一个计数器,这个计数器用来管理对象的释放提供一

2017-06-04 14:18:23 1400

原创 iOS 重复点击问题,在time时间内不论调用多少次,只执行一次。

button的重复点击问题简单的办法 利用enable属性来标记1 - (IBAction)clickBtn1:(UIbutton *)sender2 {3 sender.enabled = NO;4 doSomething5 sender.enabled = YES;6 }或者定义一个属性标记1 -

2017-06-04 14:15:16 6374

原创 NSOperation的基本用法

NSOperation是OC中多线程技术的一种,是对GCD的OC包装.它包含队列(NSOperationQueue)和操作(NSOperation)两个基本要素.通过这篇文章你可以了解到:怎样使用NSOperation怎样使用NSOperationQueue如何给NSOperationQueue设置并发数NSOperationQueue的暂停恢复和取消通过添加依赖影响操作的执行顺序

2017-06-03 21:47:46 621

原创 iOS结构体的内存分配问题

结构体内存分配问题(转)1)sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。(2)终于搞懂struct结构体内存分配问题了,结构体中各个成员字节对齐遵循以下几个原则:1.结构体每个成员相对于结构体首地址的偏移量(offset)都是(这个)成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);  例如有以下一个

2017-06-03 11:55:35 1834

原创 CGPoint存入数组,

CGPoint  itemSprite1position = ccp(100,200);     NSMutableArray * array  = [[NSMutableArray alloc] initWithObjects:NSStringFromCGPoint(itemSprite1position),nil];从数组中取值的过程是这

2017-06-03 10:14:56 1060

原创 多线程知识巩固(九)锁

5.使用原子操作非阻塞同步的方式是用来执行某些类型的操作而避免扩展使用锁。尽管锁是同步两个线程的很好方式,获取一个锁是一个很昂贵的操作,即使在无竞争的状态下。相比,许多原子操作花费很少的时间来完成操作也可以达到和锁一样的效果。原子操作可以让你在32位或64位的处理器上面执行简单的数学和逻辑的运算操作。这些操作依赖于特定的硬件设施(和可选的内存屏障)来保证给定的操作在影响内存再次

2017-06-02 23:01:31 298

原创 多线程知识巩固(八) 异步,同步

多线程是程序开发中非常基础的一个概念,大家在开发过程中应该或多或少用过相关的东西。同时这恰恰又是一个比较棘手的概念,一切跟多线程挂钩的东西都会变得复杂。如果使用过程中对多线程不够熟悉,很可能会埋下一些难以预料的坑。iOS中的多线程技术主要有NSThread, GCD和NSOperation。他们的封装层次依次递增,其中:NSThread封装性最差,最偏向于底层,主要基于th

2017-06-02 20:35:04 363

原创 多线程知识巩固(七) 多线程安全读写

Dispatch Group在追加到Dispatch Queue中的多个任务处理完毕之后想执行结束处理,这种需求会经常出现。如果只是使用一个Serial Dispatch Queue(串行队列)时,只要将想执行的处理全部追加到该串行队列中并在最后追加结束处理即可,但是在使用Concurrent Queue 时,可能会同时使用多个Dispatch Queue时,源代码就会变得很复杂。在这

2017-06-02 16:54:22 840

原创 多线程知识巩固(七)dispatch_barrier_async

首先解释下标题里地括号是什么意思,GCD有个函数叫dispatch_barrier_async,还有个函数叫dispatch_barrier_sync,这个括号只是用来防止标题取得太长…>_对于dispatch_barrier_async可能有的朋友没用过,不知道它是干嘛的,简单地介绍一下下,知道的朋友可以跳过此段。 假设我们原先有6个任务要执行,我们现在要插入一个任务0,这个任务0要

2017-06-01 23:08:26 398

原创 多线程知识巩固(六) dispatch_semaphore_t

一 初识 dispatch_semaphore_t signal//传递的参数是信号量最初值,下面例子的信号量最初值是1 dispatch_semaphore_t signal = dispatch_semaphore_create(1); dispatch_time_t overTime = dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PE

2017-06-01 18:14:00 538

原创 程序设计巩固 (一)模块化与解耦

模块化与解耦简述本文主要讲述了在iOS开发过程中,模块化工程架构的一种组织方式,本文主要讲述基于cocoapods来做模块化的方案,详细讲述了iOS开发怎么进行模块划分的内容,主要会在以下方面做阐述:为什么要做模块化模块设计原则模块化开发有哪些优点和缺点解耦与通信1.为什么要做模块化?我们都知道最基本的代码设计原则:“Don’t repeat yoursel

2017-06-01 15:31:28 947

原创 多线程知识巩固(五) 死锁

GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能。如此强大的工具用不好可能会出现线程死锁。 如下代码:- (void)viewDidLoad{ [super viewDidLoad]; NSLog(@"=================4"); dispatch_sync(dispatch_get_main_queue

2017-06-01 13:07:31 303

原创 多线程知识巩固(四)

平常开发中会经常用gcd做一下多线程任务,但一直没有对同步、异步任务在串行、并行队列的执行情况做个全面的认识,今天写了个demo跑了下,还是有些新发现的。代码如下:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{     [self gcdTest];} -(void)gcdT

2017-06-01 11:45:28 272

原创 多线程知识巩固(三)

dispatch_sync(),同步添加操作。他是等待添加进队列里面的操作完成之后再继续执行。 dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT); NSLog(@"1"); dispatch_sync(

2017-06-01 11:22:32 283

空空如也

空空如也

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

TA关注的人

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