- 博客(57)
- 收藏
- 关注
转载 git命令行演练
显⽰示隐藏⽂文件 defaults write com.apple.finder AppleShowAllFiles -bool true GIT演练 一.个人演练(命令行演练) 1.进入到⼯工作⽬录中,初始化一个代码仓库 git init 2.给该git仓库配置一个用户名和邮箱 git config user.name “why” git config use...
2019-06-04 10:20:00
204
转载 GCD可以设置线程最大并发量
-(void)dispatchSignal{ //crate的value表示,最多几个资源可访问 dispatch_semaphore_t semaphore = dispatch_semaphore_create(2); dispatch_queue_t quene = dispatch_get_global_queue(DISPATCH_QUEUE...
2019-04-12 11:25:00
959
转载 Runtime的用法有哪几种
1,动态添加一个类,就像KVO一样, 系统是在程序运行的时候根据你要监听的类, 动态添加一个新类继承自该类, 然后重写原类的setter方法并在里面通知observer的. // 创建一个类(size_t extraBytes该参数通常指定为0, 该参数是分配给类和元类对象尾部的索引ivars的字节数。) Class clazz = objc_allocateClassPai...
2019-03-25 21:19:00
288
转载 如何监听app所有事件
1, 修改main方法 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, NSStringFromClass([AppDelegate class]), NSStringFromClass([AppDelegate c...
2019-03-25 19:28:00
1300
转载 OC消息转发机制
OC消息发送机制: 使用运行时,通过selector 去快速查找IMP(函数指针)的过程。 消息转发:IMP找不到的时候,通过一些方法做转发处理。 #import "Person.h" #import "Dog.h" #import "Animal.h" #import <objc/runtime.h> @implementation Person ...
2019-03-21 20:07:00
161
转载 AFNetworking实现文件下载
#import "ViewController.h" #import "AFNetworking/AFNetworking.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)...
2019-03-20 15:57:00
1285
转载 NSURLSessionDownloadTask实现断点下载,对下载任务进行暂停,取消,恢复
NSURLSessionDownloadTask不能实现离线断点下载 因为该代理方法是直接将下载结果返回,而不是分步存储磁盘,因此离线断点下载可以使用NSURLSessionDataTask #import "ViewController.h" @interface ViewController ()<NSURLSessionDownloadDelegate> ...
2019-03-20 11:58:00
429
转载 NSURLSession使用NSURLSessionDownloadTask实现大文件下载,监听下载进度
感觉到法国 感受到附近开个户口登记 #import "ViewController.h" @interface ViewController ()<NSURLSessionDownloadDelegate> @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @im...
2019-03-20 10:44:00
443
转载 NSURLSession使用NSURLSessionDataTask实现大文件下载,使用NSFileHandle实现一边接收数据,一边存到沙盒...
NSURLSession实现大文件下载,使用NSFileHandle实现一边接收数据,一边存到沙盒 //文件句柄(指针) NSFileHandle实现边接收边写数据到沙盒中 /* 特点:在写数据的时候边写数据边移动位置 使用步骤: (1)创建空的文件 (2)创建文件句柄指针指向该文件 (3)当接收到数据的时候,使用该句柄来写数据 (4)当所有的数据写完,应...
2019-03-19 16:42:00
196
转载 NSURLSession发送POST请求
#import "ViewController.h" @interface ViewController ()<NSURLSessionDataDelegate> @property (nonatomic, strong) NSMutableData *totalData; @end @implementation ViewController...
2019-03-19 15:22:00
390
转载 NSURLConnection发送Get网络请求
// // ViewController.m // NSURLConnection使用 // // Created by 李圣培 on 2019/3/15. // Copyright © 2019年 李圣培. All rights reserved. // #import "ViewController.h" @interface ViewContro...
2019-03-15 12:46:00
167
转载 Runloop内部的自动释放池
Runloop内部的自动释放池: 自动释放池第一次创建:当Runloop启动的时候 自动释放池最后一次销毁: 当Runloop退出的时候 自动释放池其他时间的创建和销毁: 当Runloop即将进入休眠的时候,会把之前的自动释放池释放,重新创建一个新的自动释放池。 转载于:https://www.cnblogs.com/dashengios/p/10530820.html...
2019-03-14 15:56:00
111
转载 监听Runloop的状态
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { CFRunLoopObserverRef observerRef = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRun...
2019-03-12 21:47:00
746
转载 如何增加按钮的点击间隔时间
也是写一个分类 #import <UIKit/UIKit.h> @interface UIControl (FMGControl) @property (assign, nonatomic) NSTimeInterval acceptEventInterval; @end ---------------下面是.m文件------...
2019-03-11 21:31:00
622
转载 如何增加button的点击范围
写一个UIButton的分类 #import <UIKit/UIKit.h> @interface UIButton (EnlargeEdge) - (void)setEnlargeEdge:(CGFloat) size; - (void)setEnlargeEdgeWithTop:(CGFloat) top right:(CGFloat) ri...
2019-03-11 21:23:00
580
转载 定时器Timer的使用
//Runloop 主线程的Runloop默认开启,不需要再去启动。 子线程的Runloop需要手动开启。 // #import "ViewController.h" @interface ViewController () @property (nonatomic, strong)NSTimer *timer; @property (nonat...
2019-03-10 23:05:00
212
转载 NSCache
NSCache是苹果官方提供的缓存类,具体使用的 NSDictionary类似,在AFN和SDWebImage框架中用来管理缓存。 苹果官方解释:NSCache在系统内存很低时,会自动释放对象。建议:在收到内存警告时,主动调用removeAllObject来释放对象。 NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁。 NSCache只是对key进行stron...
2019-03-03 21:58:00
113
转载 GCD和NSOperation的区别
其实我们在通过NSOperation和GCD进行开发过程中,会发现两者执行的方式有许多相似之处,NSOperation和GCD参照对比,NSOperationQueue和dispatch_queue参照对比,但是两者之间还是有许多差别的,具体区别: GCD的核心是C语言写的系统服务,执行和操作简单高效,因此NSOperation底层也通过GCD实现,换个说法就是NSOperat...
2019-02-23 00:53:00
440
转载 NSOperation实现线程间通信
//创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //封装操作 NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"执行耗时操作"+++++++...
2019-02-23 00:38:00
189
转载 NSOperation添加操作依赖和监听
//创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //封装操作 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"1-----------%@...
2019-02-23 00:04:00
180
转载 自定义NSOperation
自定义操作: -(void)customOperation { //创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //封装操作 XMGOperation *op = [[XMGOperation alloc]init];//自定义NSOperatio...
2019-02-22 23:30:00
120
转载 NSOperation的多线程
NSOperation基于GCD的封装,使用的步骤和GCD相似,①创建队列 ②封装操作任务。 NSOperation有两种队列: 主队列: NSOperationQueue *queue = [NSOperationQueue mainQueue]; 自定义队列(就是并发队列): NSOperationQueue *queue = [[NSOperationQu...
2019-02-22 21:41:00
133
转载 单例的实现(完整版代码)
#import "XMGTool.h" static XMGTool * _instance;//静态变量保证了单例的唯一性,静态变量是程序一开始就存在的 @interface XMGTool ()<NSCopying, NSMutableCopying> @end @implementation XMGTool +(instanc...
2019-02-22 20:31:00
185
转载 GCD队列组的使用
dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ NSLog(@"------CCCCCCCCC-------"); }); dispatch_gr...
2019-02-22 00:54:00
213
转载 GCD栅栏函数dispatch_barrier
需求: 有4个任务, 需要开启多条线程去执行。 有一个特殊任务0, 需要在1,2任务执行完后, 再执行3, 4任务。 dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ ...
2019-02-21 23:58:00
272
转载 GCD快速迭代(遍历)
函数: 该方法会开启多条子线程, 主线程也会参与执行。 因此不要传主队列。 dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) { }); @param 10 指定重复次数 指定10次 @param queue 追加对象的Dispatch ...
2019-02-21 23:00:00
374
转载 延迟执行的几种方法
第一种: [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; 第二种: [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:N...
2019-02-20 23:13:00
2085
转载 关于GCD中同步函数+主队列产生死锁的一点理解
首先看个产生死锁的代码-(void)syncMain{ //获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"start"); //同步函数 dispatch_sync(queue, ^{ NSLog(@"------ %@",[NSThread curr...
2019-02-19 22:07:00
232
转载 GCD概念理解:同步异步,并行串行
GCD核心概念: 1,任务和队列。 任务:要做什么 队列:存放任务。 GCD使用步骤: 1,创建队列 2,封装任务,把任务添加到队列中。 封装任务的函数: 同步函数:dispatch_sync 该函数不具备开辟线程的能力,不能开辟线程。 任务执行的方式: 同步 异步函数:dispatch_async 该函数具备开辟线程的能力,可以开辟线程。 ...
2019-02-16 21:24:00
230
转载 线程间的通信
开辟新的线程: [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil]; [self performSelectorInBackground:@selector(download) withObject:nil]; 子线程与主线程的通信: [self ...
2019-02-16 20:27:00
103
转载 nonatomic与atomic
nonatomic 非线程安全的,适合内存小的移动设备,内部不会加锁。 atomic 线程安全的,需要消耗大量的资源,内部会对setter方法加锁 开发中的建议: 1,所有的属性都声明为 nonatomic (如果不声明,默认是atomic) 2,尽量避免多线程抢夺同一资源 3,尽量将加锁,资源抢夺的业务逻辑交给服务端处理,减少移动客户端的压力。 转载于:https://ww...
2019-02-15 23:59:00
183
转载 多线程安全----同步锁(互斥锁)
多条线程抢夺同一资源时,经常需要加锁,保证同一时间只能有一条线程操作一个资源。 同步锁就是互斥锁 格式:@synchronized(token) { } token:锁对象,要使用全局的对象,建议使用self {} 要加锁的代码段 注意点:加多把锁是无效的。 要注意加锁的位置。 互斥锁的优点: 能有效防止多线程因抢夺资源造成的数据安全问题 互斥锁的缺点:需要消耗大量的c...
2019-02-15 23:24:00
451
转载 多线程之线程的状态有几种
线程从生到死有几种状态: 创建(new)------就绪start-----------运行running-----------阻塞sleep----------死亡dead cpu调用线程是从可调度线程池中调用, 当线程阻塞时会移出可调度线程池。 线程是不能直接从阻塞状态直接变成运行状态的, 需要先变成就绪状态,当cpu调用该线程时, 就会变成运行状态。 控制线程的...
2019-02-15 22:00:00
1511
转载 NSString为什么经常用copy修饰,用strong会有什么问题?
@interface ViewController () @property (nonatomic, strong) NSString *str1; @property (nonatomic, copy) NSString *str2; @end @implementation ViewController - (void)view...
2019-02-14 15:58:00
480
转载 多线程技术
多线程: 串行->针对一个线程中有多个任务,按顺序执行。 并行->多个线程的执行情况,同时执行。 多线程优点: 提高程序的性能 缺点: 需要开销,程序更加复杂。 多线程技术方案: pthread 适用于unix, Linux, Windows,可跨平台 NSThread 面向对象,简单易用 GCD 充分利用设备的多核,旨在替代NSThr...
2019-02-13 17:08:00
125
转载 关于汇编语言
Cpu操作内存, 通过寄存器操作,不是直接操作内存。 高级语言编译成汇编语言, 汇编语言再编译成机器语言,机器语言再运行到计算机。 汇编语言与机器语言 是一一对应的。可以编译与反编译。 高级语言可以编译成汇编或机器语言,但是汇编几乎不可能还原成高级语言。 转载于:https://www.cnblogs.com/dashengios/p/10368644.html...
2019-02-13 10:53:00
140
转载 Swift泛型
swift 特性, 可以定义泛型类型 func SwapTwoValues <T>(value1: inout T, value2: inout T) { let p = value1 value1 = value2 value2 = p } 参数为泛型, ...
2018-12-28 10:20:00
146
转载 swift关键字
final 不希望某个类被继承和重写。这种通常是一些辅助性质的工具类或者方法,特别那种只包含类方法而没有实例方法的类。比如MD5加密类这种,算法都十分固定,我们基本不会再继承和重写。 mutating 方法前加, 为了能在该方法中 修改struct 或者Enum的变量。 Struct或者 Enum 中可以定义方法, 但是默认情况下,在方法中时不能修改变量的值的。 s...
2018-12-28 10:01:00
126
转载 Swift开发注意点
如果定义属性的时候,没有初始化, 那么必须在后面加上? 只要在构造方法(init方法)中对属性进行了初始化, 那么就不用加? 如果是定义一个基本数据类型,那么建议直接赋值为 0 (因为在调用super.init时不会给该属性分配存储空间) Swift允许有同名的方法, 只要参数或者返回值不一样 即可。 自定义构造方法,那么默认的构造方法就会失效。 C和OC的结构体只能定义...
2018-12-23 22:31:00
230
转载 Mac上安装lua
curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make macosx make test lua sudo make install 转载于:https://w...
2018-07-05 14:50:00
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅