自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gif转化命令

gif转化命令 ffmpeg -ss 00:00:03 -t 5 -i video.mov -s 640X360 -r “15” gif.gif

2017-11-20 20:46:24 333

转载 YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>=

YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0).ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20)ERROR:

2017-10-28 22:41:43 13451

原创 Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

mac os x 由于手动安装rvm导致了命令行一直报错 Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources 经过不断尝试 使用如下方案解决rvm get stable brew update brew doctor brew install ope

2017-10-13 10:29:32 902

原创 GCD(二)

在开发中,我们经常会碰到一类问题,A任务开始执行的前提是B任务执行完成了,针对这种,如果只是简简单单的一个任务接一个任务,可能使用block 嵌套也可以做到,但是如果是C任务开始执行需要等A、B两个异步任务完成,这个呢?这里就需要使用到一些GCD的高级用法。 1、gcd的分组 //创建分组 dispatch_group_t group = dispatch_group_creat

2017-09-15 11:50:29 299

原创 几种编程思想(链式编程、响应式编程、函数式编程)

1、链式编程,主要通过点‘.’来连接不同的函数调用 iOS上实现链式编程比较好的框架就是Masonry,通过查看Masonry源码,我们发现,每一个函数返回类型都是一个Block变量,然后Block变量中返回的内容就是当前对象本身。这样来实现通过点调用,直接上实例,实现一个简单的计算器/** 加法 */- (Calculator * (^)(CGFloat num))add {

2017-09-11 16:13:53 8616

原创 GCD中任务与队列(一)

首先,GCD是一套基于C的并发编程(其实并不能理解为多线程,因为这个并不是自己来控制线程),使用的时候,我们不需要管理线程的任何生命周期,系统会自动帮我们管理。首先在底层是有一个任务队列与线程池的概念,如果这个不懂,百度一下先。其次先理解以下几个概念。 1、同步、异步 同步:表示在当前线程(注意:不一定就表示主线程)执行任务,不去线程池中拿线程 异步:表示不在当前线程执行任务,

2017-09-01 14:25:09 278

原创 Swift实现单例模式

设计模式一直都是老生常谈的,自己最近学习Swift,就拿设计模式来练练手吧 首先是单例模式一、为什么要使用单例模式?1、控制资源的使用,通过线程同步来控制资源的并发访问(我觉得这个对客户端来说,只是个理论而已) 2、控制实例产生的数量,达到节约资源的目的 3、作为通信的媒介使用,其实就是数据的共享,它可以在不建立直接关联的情况下,让多个不相关的线程之间实现通信 iOS中比较经典的单例类有:U

2017-05-17 16:04:48 1380

原创 Charles解析https的坑

最近软件碰到一个非常奇葩的bug,就是软件DEBUG的时候没有任何问题,发布以后,一直存在点问题。so,怎么办??想到了使用release版本抓包数据,查找问题。之前一直使用Charles,抓包https的没有问题,enable ssl的时候出现unknown消息,disable ssl的时候出现乱码,这不是要逼死我的节奏吗?直接google,弄了半天也没找到靠谱的消息。后来在一篇博文中找到了解决方

2017-04-28 11:11:32 4948

转载 iOS中消息机制的处理

上一篇文章说道了消息的转发,*说到了调用一个类的方法时,先在本类中的方法缓存列表中进行查询,如果在缓存列表中找到了该方法的实现,就执行,如果找不到就在本类中的方列表中进行查找。在本类方列表中查找到相应的方法实现后就进行调用,如果没找到,就去父类中进行查找。如果在父类中的方法列表中找到了相应方法的实现,那么就执行,否则就执行下方的几步。*当调用一个方法在缓存列表,本类中的方法列表以及父类的方法列表找不

2017-04-21 22:04:59 632

原创 iOS中RunTime的应用

大家都知道iOS是基于运行时机制,它是主要由C和汇编编写的库,对C进行了特殊处理,将结构体视为对象,将函数视为方法。C是编译时语言,而OC是动态运行时语言,所以在编译阶段,尽管OC中的方法没有实现也不会报错,而C会报错。在运行时,OC才进行方法的处理。 runtime中最主要的机制是消息机制。比如:[man run]; 在OC实现中实际为objc_msgSend(man, @selector(ru

2017-04-21 21:30:10 414

转载 iOS中的RunLoop

RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中,苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 目录RunLoop 的概念RunLoop 与线程的关系RunLoop 对外的接口RunLoop 的 ModeRu

2017-04-20 18:01:17 417

转载 IOS内存管理retain,assign,copy,strong,weak

IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数。 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样。(一般情况下: 后面会讨论例外情况) alloc 对象分配后引用计数为1 retain 对象的引用计数+1 copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变relea

2017-03-02 10:37:41 322

转载 NSString的retainCount

字符串常量 NSString *s = @”test”; NSLog(@”s:%d”,[s retainCount]); // -1或2147483647(即UINT_MAX ( Maximum value an `unsigned int’)) 因为”test”为字符串常量,系统不会收回,也不会对其作引用计数,即使我们对s如何retain或release。stringWithFormat

2017-02-27 17:01:25 329

原创 iOS中的Copy

iOS提供了copy与mutableCopy方法,copy就是复制了一个不可变的对象,而mutableCopy就是复制了一个可变的对象,下面通过几个实例来演示一下。一、非容器类对象的copy与mutableCopy NSString *str = [NSString stringWithFormat:@"%@", @"create by "]; NSLog(@"str: %p 值:%@

2017-02-27 17:00:23 343

原创 iOS中 atomic、nonatomic、assign、copy、retain、readonly的定义与区别

atomic、nonatomic:atomic与nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic:设置成员变量的@property属性时,默认为atomic,提供多线程安全属性。在多线程环境下,原子操作是必要的,否则会引起莫名其妙的BUG。加了atomic,setter函数相当于如下:{lock}if (property != newValue) {

2017-02-27 15:57:34 287

原创 堆与栈

一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区static):包含两个分

2017-02-27 14:10:20 228

原创 多线程同步问题

说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题。举例来说,每年春节都是一票难求,在12306买票的过程中,成百上千的票瞬间就消失了。不妨假设某辆车有1千张票,同时有几万人在抢这列车的车票,顺利的话前面的人都能买到票。但是如果现在只剩下一张票了,而同时还有几千人在购买这张票,虽然

2017-02-24 09:20:21 427

原创 iOS信号量机制

记得之前有讲解过iOS多线程的处理,当时使用GCD的时候还有很多没有讲太清楚的地方,今天做一个小小的补充: 使用NSOperationQueue可以控制并发线程,但是如何在GCD中快速的控制并发呢?这里就需要使用到信号量(dispatch_semaphore)。信号量是一个整型值并且具有一个初始计数值,并且支持两个操作:信号通知与等待。当一个信号被信号通知,其技术会被增加。当一个线程在一个信号量上

2017-02-23 20:36:12 912

转载 Block的详细分析(二)

一,前言在前文《深入浅出Cocoa多线程编程之block与dispatch quene》中我介绍了 block 的一些基本语法以及如何和 GCD 结合的使用示例。block 是在 iOS 4 中引入的新特性,它和 C++ 11 中的 lamba 表达式概念相似,有时候也被称为闭包。经过一段时间的使用,我发现要用对用好 block 还是有不少需要注意的地方,今天就来八一八这些值得注意的事儿。二,blo

2017-02-23 16:39:40 270

转载 Block的详细分析

block 是 Apple 在 GCC 4.2 中扩充的新语法特性,其目的是支持多核并行编程。我们可以将 dispatch_queue 与 block 结合起来使用,方便进行多线程编程。1,实验工程准备在 XCode 4.0 中,我们建立一个 Mac OS X Application 类型的 Command Line Tool,在 Type 里面我们选择 Foundation 就好,工程名字暂且为

2017-02-23 15:10:35 525

原创 Block的陷阱总结

1、引发内存泄露 假设一个类有两个属性:block和name;//// PHBlockTest.h// BlockTestTest//// Created by 項普華 on 2017/2/9.// 邮箱: [email protected]// 电话: +86 13316987488// 主页: https://github.com/xphaijj// Copyr

2017-02-12 11:07:43 316

原创 多线程的详细使用

上篇转载的博文有讲解多线程的几种使用,但是NSOperation的介绍不够详细,在此做一下补充。 NSOperation本身是不能直接用来操作的,需要继承NSOperation实现相应的方法或者直接使用NSBlockOperation、NSInvocationOperation才能正常使用。下面就分别从自定义、NSBlockOperation、NSInvocationOperation三个方面来讲

2017-02-09 12:33:13 388 1

转载 在IOS中使用多线程

多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。 在系统级别内,程序并排执行,程序分配到每个程序的执行时间是基于该程序的所需时间和其他程序的所需时间来决定的。 然而,在每个程序内部,存在一个或者多个执行线程,它同时或在一个几乎同时发生的方式里执行不同的任务。 概要提示: iPhone中的线程应用并不是无节制的,官方给出的资料显示,iPhone OS下的主线程的堆栈大小是1M

2017-02-08 22:14:43 870

原创 FFmpeg中结构体的认识

FFmpeg使用太复杂,一个重要的方面是包含的结构体太多,太复杂。我们来分析分析其中的几个重要的结构体。 AVFormatContext:该结构体在使用FFmpeg的过程中会一直使用到,它的定义如下/** * 格式化输入输出上下文. * 使用avformat_alloc_context() 创建一个 AVFormatContext. */typedef struct AVFormatCon

2017-02-08 22:11:13 844

原创 FFmpeg的初识

前言:一直以来,都想下决定写博文,但是都因为懒惰没下手,这次被我老大强制要求我每周更新一篇博文,觉得也是一个契机。所以也就借这次机会开始试试。 音视频的编解码,一直给我的感觉是太难。FFmpeg作为国内外使用最为广泛的跨平台的音视频编解码的框架,包括暴风影音、QQ影音的内核都使用的是FFmpeg。FFmpeg学习起来也是非常痛苦的。下面来写一个简单的播放器的实例。(FFmpeg的导入过程我就不详细

2017-02-04 18:37:51 1877 3

空空如也

空空如也

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

TA关注的人

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