格而知之9:一些关于GCD的笔记】的更多相关文章

1.最近在重读当年刚开始学习多线程时的笔记,发觉其中有一些地方还是比较容易模糊,于是整理这篇笔记记录一下. 执行方式和队列 2.队列用来存放管理要执行的任务,它分为并发队列(Concurrent Dispatch Queue)和串行队列(Serial Dispatch Queue): 并发队列:队列内的任务允许被分配给多条线程同时执行: 串行队列:队列内的任务只能被放在一条线程内顺序执行. 3.执行方式分为异步(Asynchronization)和同步(Synchronization): 异步:…
1.什么是Run Loop? (1).Run Loop是线程的一项基础配备,它的主要作用是来让某一条线程在有任务的时候工作.没有任务的时候休眠. (2).线程和 Run Loop 之间的关系是一一对应的,但是并不是说新开一条线程就会自动生成这条线程对应的Run Loop,每一条线程里的Run Loop都是需要主动去获取,并且启动它,它才会开始运作的.主线程的Run Loop之所以不用我们手动去获取启动它,是因为在App启动的时候它已经默认启动了. (3).Run Loop的核心是__CFRunL…
最近准备做一个随手笔记类的app给自己用,考虑到从未使用过Core Data,就决定用Core Data来做数据存储.在网上参考了一些Core Data的资料后,用一天的时间写了这个demo,主要测试了增删改查,以及排序和分页这些基本功能. demo的代码可以在GitHub上下载: https://github.com/ShayneYeorg/Core-Data-Sample 1.大致上,Core Data即是将数据库内容封装成了类和对象: (1).一个数据库实例对应一个NSManagedObj…
23.在前文中的例子中,Block结构体里的isa指针还没有详细讲解,这个指针都被置向了_NSConcreteStackBlock,它标识了Block的类型. 其实除了_NSConcreteStackBlock这个类型外,Block还有其他的类型,这些类型总共有3种: (1)._NSConcreteStackBlock (2)._NSConcreteMallocBlock (3)._NSConcreteGlobalBlock 24.这3种类型分别表示了Block对象存储的区域,如下图: 25.编…
11.那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程. 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文件中的OC代码改写成C++代码(其中主要部分还是普通的C语言代码),通过这些代码就能看到Block是如何使用C++语言实现的. 12.首先编写一个最简单的Block,没有返回值和参数列表,执行它会输出“Shayne Yeorg”.代码如下: 然后使用11的命令转换这个文件,可以得到文件main.cp…
1.Block 本质上是一个struct结构体,在这个结构体中,最重要的成员是一个函数(当然除函数外还有其他重要的成员). 2.在开始解析Block之前,首先来回顾一下Block的格式.Block相关的格式有2个: (1).Block对象的格式: (2).Block变量的格式: 3.对于Block对象,它有几种常见的格式: (1).一个完整的Block对象的格式如下: 比如这个Block对象: 可以发现,完整的Block对象和函数的定义非常相似,比如这个函数: 两者之间的区别仅仅是:Block对…
关联对象 14.使用Category对类进行拓展的时候,只能添加方法,而不适合添加属性(可以添加属性,也可以正常使用get方法和set方法,只是不会自动生成以下划线开头命名的成员变量). 可以通过关联对象(Associated Objects)来在Category里添加一个关联对象,然后将这个对象当做属性来看待使用,制造出“在Category中添加属性”的效果. (1).假设要在NSObject类的Category中添加一个关联对象,处理方法如下: 首先在@interface里照常添加属性ass…
消息发送(Messaging) 8.以上便是runtime相关的一些数据结构,接下来我们回看一开始的疑问: objc_msgSend()函数在执行的过程中是如何找到对应的类,找到对应的方法实现的呢? 这就是消息发送(messaging)的处理过程了: (1).对于上文的Class的数据结构的描述,官方文档只简略了把它们归纳成了两部分:一个指向其父类的指针和一个方法调用表(这个Class的所有方法的selector和实现代码所在地址的关联表): (2).当某个消息被发送到一个对象之后(即对象执行某…
基本简介 1.根据官方文档,OC有一个特性:它会尽可能把一些决定从编译时和链接时推迟到运行时才处理,所以这门语言需要的就不只是一个编译器,它还需要一个runtime系统来处理那些已经被编译过的代码. 2.runtime有两种:legacy runtime和modern runtime,区别在于: (1).在legacy runtime中,如果你修改了一个类的实例变量之后,你需要重新编译一下: (2).在modern runtime中,在这种情况下你无需再重新编译一次. 3.OC的程序和runti…
EXC_BAD_ACCESS算是一个比较常见的错误,大部分情况下,它出现在某个对象还未初始化或已被释放后,还去试图访问这个对象的时候,即是在出现悬挂指针的时候(当然也有非悬挂指针导致的EXC_BAD_ACCESS).在MRC机制下,EXC_BAD_ACCESS相对会出现得比较多,毕竟手动管理引用计数比较可能会数错. 在ARC机制下就出现得比较少了,我自己就遇到过几次,可惜基本都忘了记下来,今天就准备试一试如何制造出一个EXC_BAD_ACCESS. 1.首先考虑到悬挂指针.悬挂指针的出现有两种可…
UIView的autoresizingMask属性,是用在当一个UIView实例的父控件的尺寸发生变化时,来自动调整UIView实例在父控件中的位置与尺寸的.autoresizingMask属性是一个枚举值,它的枚举成员如下: 它通过使UIView的上.下.左.右.宽度或高度自动变化来调整.下面分几种情况来讨论这个属性,假设父控件为backgroundView,子控件为subView: 1.当没有使用autoresizingMask属性或autoresizingMask属性的值为UIViewAu…
在使用UIButton时,有时候需要调整按钮内部的imageView和titleLabel的位置和尺寸.在默认情况下,按钮内部的imageView和titleLabel的显示效果是图片在左文字在右,然后两者紧挨在一起构成组合居中显示.如下图: 我们可以使用setImageEdgeInsets:和setTitleEdgeInsets:方法来调整两者的位置.在使用这两个方法之前,我们首先要将imageView和titleLabel定位在UIButton的左上角位置,方便参照坐标调节位置.使用以下语句…
引理 已知:k|a,k|b 求证:k|(m*a+n*b) 证明:∵ k|a ∴ 有p*k=a 同理可得q*k=b ∴ p*k*m=m*a,q*k*n=n*b ∴ k(p*m+q*n)=m*a+n*b ∴ k|(m*a+n*b) 条件:a,b均为正整数 求证:gcd(a,b)=gcd(b,a%b) 证明:设m=gcd(a,b),n=gcd(b,a%b). 则必有p能使p*b+a%b=a; ∵ n=gcd(b,a%b) ∴ n|(p*b+1*a%b)且n|b ∴ n|a 即 n为a,b公约数 ∵ m…
什么是GCD 1.全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 2.纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 任务和队列 GCD中有2个核心概念 任务:执行什么操作 队列:用来存放任务 GCD的使用就2个步骤,首先确定定制任务(…
********************************* 基本概念 *********************************** 1. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法,是苹果主推的多线程处理机制.在多核CPU的状态下,GCD的性能很高. 它自动利用更多的CPU内核,管理线程生命周期,程序员不需要编写任何线程管理代码,只需要给定要让GCD执行的任务. 2. GCD是纯C语言的,GCD中的函数大多数以disp…
// // TWFXViewController.h // Demo_GCD // // Created by Lion User on 12-12-11. // Copyright (c) 2012年 Lion User. All rights reserved. // #import <UIKit/UIKit.h> @interface TWFXViewController : UIViewController @property (retain, nonatomic) IBOutlet…
设最大权值为\(M\) \(T=\sqrt M\) 定理 任意一个\(\le M\)的数一定可以表示为abc三个数的乘积 满足这三个数要么\(\le T\),要么是一个质数 证明: 考虑反证 假设\(a>b>c\),满足\(a>T\)且\(a\)不为素数 因为\(a>T\)且\(abc\le M\),则有\(bc\le T\) 我们设\(a=x*y\),一定不可能x,y均\(\ge T\) 假设\(x>y\),则\(y \le T\) 则原数可表示为\(x,y,bc\)三数乘…
原理显然 由于当x,y都为奇数时进行辗转相见 每次减完必有偶数 而偶数最多除log次 那么也最多减log次 复杂度有保证 注:代码未验证 int gcd(int x,int y){ int res=1; while(y){ if(x%2==0&&y%2==0) res*=2; else if(x%2==0) x>>=1; else if(y%2==0) y>>=1; else{ if(x>y) swap(x,y); y-=x; } } return x*res…
原理:移除所有oncopy的监听器. 使用: 新建书签,地址设为: javascript: getEventListeners(document).copy.forEach(({listener}) => document.removeEventListener('copy', listener)) 需要使用时,在知乎页面点击书签即可 P.S. 仅限于做笔记,请勿用于转载或商业用途…
参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解SQL 1.1 数据库基础 1.1.1 数据库 数据库是一个以某种有组织的方式存储的数据集合,即保存有组织的数据的容器(通常是一个文件或一组文件). 数据库软件应称为数据库管理系统(DBMS). 1.1.2 表 表是一种结构化的文件,可用来存储某种特定类型的数据. 模式,关于数据库和表的布局及特性的信息. 1…
// 后台执行: dispatch_async(dispatch_get_global_queue(, ), ^{ // something }); // 主线程执行: dispatch_async(dispatch_get_main_queue(), ^{ // something }); // 一次性执行: static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // code to be executed once })…
还有一个<Sqlserver2008技术内幕>的笔记,也很好!~ http://www.cnblogs.com/liupeng61624/p/4354983.html 温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用法 select top 5 id from student 获取前五条记录 可以利用top来写sql分页语句 3 排序order…
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar(50) not null, vend_address varchar(100), vend_city varchar(100), vend_state varchar(100), vend_zip varchar(20), vend_country varchar(100), PRIMARY KE…
温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用法 select top 5 id from student 获取前五条记录 可以利用top来写sql分页语句 3 排序order by select * from student order by id,name desc; 默认是升序 asc,若是降序要在列名后标明desc order by语句…
1. 在使用用户名和密码登陆MySQL数据库之后,首先需要指定你将要操作的数据库 USE $数据库名称 2. 使用SHOW 命令可以查看数据库和表中的信息 SHOW DATABASES; #列出可用数据库名称列表 SHOW TABLES; # 列出当前选择数据库内可用表的列表 SHOW COLUMNS FROM $表名 #返回指定表中所有列字段的详细信息,DESCRIBE $表名,也可以实现相同的功能 SHOW STATUS; #用于显示广泛的服务器状态信息 SHOW CREATE DATABA…
来自知乎Live-孟浩巍 1.文章重要技术及图讲解 首先在转录组RNA-seq中,有基因表达差异.基因融合.可变剪切.RNA单点突变. 在基因组中,单点变异.结构变异,CNV变异(拷贝数变异) 三类基本内容,主要是RNA-seq的分析. 从生物水平角度理解肺癌,掌握RNA-seq的建库流程 ,单细胞的建库流程和方法. 这个是通过热力图的方式,找出5种细胞中的特异性的gene marker,什么是基因标记,在某一个stage或者细胞内特异性表达的基因是基因marker. 0-15图标是取过log的…
//本题要求:(Ar*A2...An)%p,亦即[(A1*A2*...An)/(A1*A2*...Ar-1)]%p,由于A1*A2...An乘积过大,无法求得相除所得的结果 //我们需要用到乘法逆元(a*k≡1 (mod p)的k值就是a关于p的乘法逆元),而乘法逆元有如下定理®:(a*k) mod p结果与(a/b) mod p等价,其中k为b关于p的乘法逆元 //而由费马小定理(已知p是质数且gcd(a, p) = 1,则 ap-1 ≡ 1 (mod p),  所以 a*ap-2 ≡ 1 (…
这道题我们要求的是 \[\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)\] 总所周知\(lcm\)的性质不如\(gcd\)优雅,但是唯一分解定理告诉我们\(gcd(i,j)\times lcm(i,j)=i\times j\) 所以很容易的可以转化成这个柿子 \[\sum_{i=1}^N\sum_{j=1}^M\frac{i\times j}{(i,j)}\] 现在开始套路了 先设两个函数 \[f(n)=\sum_{i=1}^N\sum_{j=1}^M[(i,j)==n]\ti…
Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael can control the elements and combine them to invoke a powerful skill. Vance like Kael very much so he changes the map to make Kael more powerful.  In…
题目链接 题意 给定一个格点三角形,三个顶点分别为(0,0),(n,m),(p,0),求三角形内部的格点个数. 思路 皮克公式: \[S = \frac{i}{2}+b-1\] \(S\)为三角形面积,\(i\)为三角形边界上的格点个数,\(b\)为三角形内部的格点个数. \(i\)可由\(gcd\)求得. Code #include <bits/stdc++.h> using namespace std; typedef long long LL; int gcd(int a, int b)…