SD_WebImage-03-多线程+下载任务放入非主线程执行

 1 //
 2 //  UIImageView+WebCache.m
 3 //  02-SDWebImage
 4 //
 5 //  Created by mac on 16/4/20.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8
 9 #import "UIImageView+WebCache.h"
10
11 @implementation UIImageView (WebCache)
12
13 /**
14  *  注意点:有任务应该开启多线程,把下载放入到非主线程,加载UI必须得放入主线程
15  */
16
17 - (void)setImageWithURL:(NSURL *)url {
18
19 //    NSData *data = [NSData dataWithContentsOfURL:url];
20 //
21 //    UIImage *image = [UIImage imageWithData:data];
22 //
23 //    self.image = image;
24
25     //1。 开启多线程
26     [self performSelectorInBackground:@selector(downloadImage:) withObject:url];
27 }
28
29 - (void)downloadImage:(NSURL *)url {
30
31     NSData *data = [NSData dataWithContentsOfURL:url];
32
33     UIImage *image = [UIImage imageWithData:data];
34
35     //2。 所有和UI相关的操作都应该在主线程中执行
36     [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
37 }
38
39 @end
时间: 2024-11-08 05:19:03

SD_WebImage-03-多线程+下载任务放入非主线程执行的相关文章

多线程的非主线程的销毁机制

假设有如下代码所示的多线程: 1 private void btnNewThread_Click(object sender, EventArgs e) 2 { 3 Thread t = new Thread(new ThreadStart(Test)); 4 t.Start(); 5 this.btnNewThread.Enabled = false; 6 } 7 private void Test() 8 { 9 //-- 10 } 这个新建的线程t在执行完Test()方法后会自动销毁吗?还

Android 在非主线程无法操作UI意识

Android在应用显示Dialog是一个非常easy事儿,但我从来没有尝试过Service里面展示Dialog. 经验UI操作要在主线程,本地的服务Service是主线程里没错,可是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL.在Service这边就是去显示一个Dialog. AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

在非主线程里面使用NSTimer创建和取消定时任务

为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时任务不是UI相关的,本来就没必要在主线程执行,给主线程增加不必要的负担.当然也可以在定时任务执行时,手动将任务指派到非主线程上,但这也是有额外开销的. NSTimer的重要特性 NSTimer上的定时任务是在创建NSTimer的线程上执行的.NSTimer的销毁和创建必须在同一个线程上操作 NSTi

Android 关于非主线程不能操作UI的认识

Android在应用里显示Dialog是个很简单的事情,但是一直没试过在Service里面显示Dialog.根据之前的经验UI操作要在主线程,本地的服务Service是主线程里没错,但是远程service里面显示Dialog,听起来是不是就应该没有在主线程里面了呢? 尝试一下就知道了,写了个AIDL的调用,client端去调用AIDL,在Service这边就是去显示一个Dialog.AIDL的部分就忽略了.Service这边的代码就和Activity上显示dialog一样. AlertDialo

多线程二:jvm中的主线程&垃圾回收线程

1,什么时候使用多线程:当多个代码同事执行的时候就需要用到多线程. 2,jvm本身就是多线程的,因为在程序运行过程中会在堆内存产生很多垃圾,就需要被垃圾回收器进行回收. 3,main函数代码执行时,也在运行着垃圾回收.所以是同时执行的,这就是两个独立的线程来进行控制的. 4,执行垃圾回收的线程,称为垃圾回收线程. 5,执行main函数的线程,称为主线程. 6,创建一个执行路径(线程)的目的就是让单独一个线程去执行指定的代码和其他代码同事执行.这就是创建线程的目的. 7,对于主线程:它的运行代码度

非主线程创建窗口也能工作正常,只要我们注意一点:消息循环必须要和创建窗口在同一线程!

#include "stdafx.h" #include "win32.h" #include "windows.h" #include #define MAX_LOADSTRING 100 HWND g_hWnd = NULL; HINSTANCE g_hInst; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void CreateWnd(void) { WNDCLASS wc =

多线程三:显示主线程执行的效果-第一种继承方式 继承Thread类

首先看下一个最简单的例子 继承Thread类 覆盖run方法

Android 在工作线程(非主线程)更改UI组件

Looper.prepare();          Toast.makeText(LoginActivity.this,filedId, Toast.LENGTH_LONG).show();        Looper.loop(); 这样为什么可以?然后就是loop 是个死循环,这样子真的好吗?

将time的结果放入到文件中

缘起 今天看到一个问题,如何把time的执行结果放到文件中,心想直接time sh sleep.sh >output.log不就可以了么.其实大部分返回标准输出的命令都可以这么干,列如:ls >output.log 就会把ls的执行结果放入到output.log中. 那么为什么time命令就不行了呢? 因为:time命令返回的是标准错误输出! 实验准备: 1.有一个sleep.sh脚本,脚本内容如下:2.执行结果如下:3.通过time命令获取脚本执行时间 无效的例子1: time sh sle