多线程知识点(五)

  1. 使用SD下载图片

#import "UIImageView+WebCache.h"

[self.HMImageView sd_setImageWithURL:url placeholderImage:nil options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {

//receivedSize 接收到的文件大小, expectedSize文件的总大小} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {    }];

  1. 使用SD下载GIF

#import "UIImage+GIF.h"

//方式1:

self.HMImageView.image = [UIImage sd_animatedGIFNamed:@"2"];

//方式2

//获取图片路径

NSString *path = [[NSBundle mainBundle]pathForResource:@"2.gif" ofType:nil];

//转成二进制

NSData *data = [NSData dataWithContentsOfFile:path];

self.HMImageView.image = [UIImage sd_animatedGIFWithData:data];

  1. 使用系统自带的cache,使用方式与字典相同

第一步:

//全局cache

@property(nonatomic,strong)NSCache *cache;

第二步:

- (NSCache *)cache{

if (_cache == nil) {

_cache = [[NSCache alloc]init];

//设置缓存数量

_cache.countLimit = 5

}

return _cache;

}

第三步:

存取数据

//存储数据

[self.cache setObject:[NSString stringWithFormat:@"hello %d",i] forKey:[NSString stringWithFormat:@"haha %d",i]];

第四步:

读取数据

NSLog(@"%@",[self.cache objectForKey:[NSString stringWithFormat:@"haha %d",i]]);

缓存移除的时候调用的方法

第一步遵守协议<NSCacheDelegate>

//对象将要被移除的时候调用

- (void)cache:(NSCache *)cache willEvictObject:(id)obj

{

NSLog(@"willEvict %@",obj);

}

4:消息循环: runloop

每一个线程内部都有一个消息循环

只有主线程的消息循环默认开启,子线程的消息循环默认不开启

5:消息循环的作用:

1:能够保证应用程序不退出

2: 能够处理输入事件

6. 输入事件的模式必须和消息循环的模式相互匹配,才能够执行输入事件的代码NSDefaultRunLoopMode ,NSRunLoopCommonModes(包括其余两个) UITrackingRunLoopMode

7.设置消息循环的模式:

[[NSRunLoop currentRunLoop]addTimer:timer forMode:UITrackingRunLoopMode];

8.开启子线程:[[NSRunLoop currentRunLoop]addTimer:timer forMode:UITrackingRunLoopMode];

9.开启子线程

[self performSelector:@selector(demo) onThread:thread withObject:nil waitUntilDone:NO];

10.子线程的消息循环(死循环)默认是不开启的,手动开启

[[NSRunLoop currentRunLoop]run];

或者,定时

[[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];

时间: 2024-10-25 13:40:48

多线程知识点(五)的相关文章

Java多线程(五)、多线程其他知识简要介绍(转)

Java多线程(五).多线程其他知识简要介绍 分类: javaSE综合知识点 2012-09-19 18:12 1413人阅读 评论(1) 收藏 举报 一.线程组 [java] view plaincopyprint? /** * A thread group represents a set of threads. In addition, a thread * group can also include other thread groups. The thread groups form

Java 多线程(五) 多线程的同步

Java 多线程(五) 多线程的同步 为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资源的第一个线程为其加上锁以后,其他线程便不能再使用那个资源,除非被解锁. 程序实例 用一个取钱的程序例子,来说明为什么需要引入同步. 在使用同步机制前,整体程序如下: public class FetchMoneyTest { public static void main(Stri

ExtJS4.2 Grid知识点五:多选行(可以点击行选中记录与只能点击多选框选中记录)

本节主要学习ExtJS4.2 Grid多选行知识,示例图片: 在线演示  /  示例代码 主要内容如下: 可以点击行选中记录与只能点击多选框选中记录 选中Grid中数据加载到Form 获取Grid中多行数据,生成JSON格式 1.可以点击行来选中记录,此时多选Grid只需要配置selType: 'checkboxmodel',此时有一个缺陷,当你通过多选框勾选多条记录时,如果不小心点击某行,则当前点击行被选中,其它选中的记录行都被取消选择了. 2.只能点击多选框选中记录,此时多选Grid需要配置

C++之易混淆知识点五

一.解析类继承中父类与子类之间成员的访问可见度: 外部可见度:指的是被子类继承的父类成员在子类的外部访问控制度,有protected.public.private. 内部可见度:指的是被子类继承的父类成员在子类定义的方法中的内部访问控制度,有可访问(Y).不可访问(N). class A{     private:        void pvA(); protected:        void ptA()    public:        void pbA();         ....}

Java 多线程知识点整理

1.如何停止一个正在运行的线程? 使用共享变量,用volatile变量修饰,线程循环去访问该变量.如果线程因为发生某些事件进行阻塞,可以使用Thread的interrupt方法.可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码. class MyThread extends Thread { volatile boolean stop = false; public void run() { while (!stop) { System.out.println(g

win32 多线程 (五)Event

Event是内核对象,他可以分为自动和手动两种模式. HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName ); 参数 lpEventAttributes 安全属性.NULL 表示使用默认属性.该属性在 Windows 95中会被忽略. bManualReset 如为FALSE,表示这个event 将在变成激发状态 (因而

秒杀多线程第五篇 经典线程同步 关键段CS

版权声明:本文为博主原创文章,未经博主允许不得转载. 上一篇<秒杀多线程第四篇 一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题. 本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理. 关键段CRITICAL_SECTION一共就四个函数,使用很是方便.下面是这四个函数的原型和使用说明. 函数功能:初始化 函数原型: void InitializeCriticalSection(LPCRITIC

多线程知识点总结

1.创建线程的2种方法 方式1:继承java.lang.Thread类,并覆盖run()方法.优势:编写简单:劣势:无法继承其他父类 方式2:实现java.lang.Runnable接口,并实现run()方法.优势:可以继承其他类,多线程可以共享同一个Thread对象:劣势:编程方式稍微复杂,如需访问当前线程,需调用Thread.currentThread()方法 2. Java创建线程后,调用start()方法和run()的区别 两种方法的区别 1) start: 用start方法来启动线程,

java多线程知识点

下面是我学习多线程记录的知识点,并没详细讲解每个知识点,只是将重要的知识点记录下来,有时间可以看看,如果有不对的地方,欢迎大家支出,谢谢! 1.多线程的状态和创建方式:     线程的状态:          1.新状态:线程对象已经创建,还没有在其上调用start()方法.          2.可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态.当start()方法调用时,线程首先进入可运行状态.在线程运行之后或者从        阻塞.等待或睡眠状态回来后,也