
知识巩固
文章平均质量分 74
Erice_e
那个人好像一条狗啊
展开
-
多线程知识巩固 (一)
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。除了代码的平行执行能力,GC原创 2017-05-31 19:45:16 · 271 阅读 · 0 评论 -
method-swizzling 详解 和使用
简介在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现。每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。 我们可以利用 method_exchangeImplementati原创 2017-06-15 16:53:24 · 4110 阅读 · 0 评论 -
C语言封装成object-c的过程,实现原理
前言做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象是怎么封装的?接下来我们就使用C语言来一部一部的实现这个封装。Object对象首先我们先封装一个Object对象,我们来分析一下:如果使用C来封装对象,我们就要用到结构体每一个Object都有一个计数器,这个计数器用来管理对象的释放提供一原创 2017-06-04 14:18:23 · 1452 阅读 · 0 评论 -
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 · 6463 阅读 · 0 评论 -
NSOperation的基本用法
NSOperation是OC中多线程技术的一种,是对GCD的OC包装.它包含队列(NSOperationQueue)和操作(NSOperation)两个基本要素.通过这篇文章你可以了解到:怎样使用NSOperation怎样使用NSOperationQueue如何给NSOperationQueue设置并发数NSOperationQueue的暂停恢复和取消通过添加依赖影响操作的执行顺序原创 2017-06-03 21:47:46 · 648 阅读 · 0 评论 -
iOS结构体的内存分配问题
结构体内存分配问题(转)1)sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。(2)终于搞懂struct结构体内存分配问题了,结构体中各个成员字节对齐遵循以下几个原则:1.结构体每个成员相对于结构体首地址的偏移量(offset)都是(这个)成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding); 例如有以下一个原创 2017-06-03 11:55:35 · 1870 阅读 · 0 评论 -
多线程知识巩固(八) 异步,同步
多线程是程序开发中非常基础的一个概念,大家在开发过程中应该或多或少用过相关的东西。同时这恰恰又是一个比较棘手的概念,一切跟多线程挂钩的东西都会变得复杂。如果使用过程中对多线程不够熟悉,很可能会埋下一些难以预料的坑。iOS中的多线程技术主要有NSThread, GCD和NSOperation。他们的封装层次依次递增,其中:NSThread封装性最差,最偏向于底层,主要基于th原创 2017-06-02 20:35:04 · 398 阅读 · 0 评论 -
多线程知识巩固(七)dispatch_barrier_async
首先解释下标题里地括号是什么意思,GCD有个函数叫dispatch_barrier_async,还有个函数叫dispatch_barrier_sync,这个括号只是用来防止标题取得太长…>_对于dispatch_barrier_async可能有的朋友没用过,不知道它是干嘛的,简单地介绍一下下,知道的朋友可以跳过此段。 假设我们原先有6个任务要执行,我们现在要插入一个任务0,这个任务0要原创 2017-06-01 23:08:26 · 420 阅读 · 0 评论 -
多线程知识巩固(六) 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 · 578 阅读 · 0 评论 -
多线程知识巩固(五) 死锁
GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能。如此强大的工具用不好可能会出现线程死锁。 如下代码:- (void)viewDidLoad{ [super viewDidLoad]; NSLog(@"=================4"); dispatch_sync(dispatch_get_main_queue原创 2017-06-01 13:07:31 · 323 阅读 · 0 评论 -
多线程知识巩固(四)
平常开发中会经常用gcd做一下多线程任务,但一直没有对同步、异步任务在串行、并行队列的执行情况做个全面的认识,今天写了个demo跑了下,还是有些新发现的。代码如下:- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self gcdTest];} -(void)gcdT原创 2017-06-01 11:45:28 · 296 阅读 · 0 评论 -
多线程知识巩固(三)
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 · 299 阅读 · 0 评论 -
多线程知识巩固(2)
1、关于调度队列所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同。GCD自动的为我们提供了一些调度队列,我们也可以创建新的用于具体的目的。下面列出几种可用的调度队列类型以及如何使用。(1)serial queues(串行队列)又称私有调度队列(private),一般用再对特定资源的同步访问上。我们可以根据需要创建任意数量的串行队列,每一原创 2017-05-31 20:05:11 · 336 阅读 · 0 评论 -
KVO 实现原理
addObserver:forKeyPath:options:context:各个参数的作用分别是什么, observer中需要实现哪个方法才能获得KVO回调?/** 1. self.person:要监听的对象 2. 参数说明: * @param addObserver 观察者,负责处理监听事件的对象 * @param forKeyPath 要监听的属性 * @p转载 2017-06-15 19:01:22 · 654 阅读 · 0 评论