UI中多线程的创建以及定时器与图片的异步加载

- (void)viewDidLoad {

[super viewDidLoad];

_imgView = [[UIImageView alloc]initWithFrame:self.view.bounds];

_imgView.contentMode =  UIViewContentModeScaleAspectFit;

[self.view addSubview:_imgView];

// Do any additional setup after loading the view, typically from a nib.

//    //方法1

//    NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil];

//    [thread start];

//

//    //方法2

//    [self performSelectorInBackground:@selector(test) withObject:nil];

//      //方法3

//    [NSThread detachNewThreadSelector:@selector(test) toTarget:self withObject:nil];

//    //方法4 NSOperationQueue是一个操作队列或者线程池

NSOperationQueue *queue = [[NSOperationQueue alloc]init];

// queue.maxConcurrentOperationCount = 1;

//    [queue addOperationWithBlock:^{//往队列中添加一个操作

//        [self test];

//    }];

//    //方法5 不要直接去创建NSOperation对象

NSInvocationOperation *opertion = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];

//    opertion.queuePriority = NSOperationQueuePriorityVeryLow;

//

//    NSInvocationOperation *opertion2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:nil];

//    opertion2.queuePriority = NSOperationQueuePriorityVeryHigh;

//

//方法6

//    ThreadOperation *threadOperation = [[ThreadOperation alloc]init];

//    [queue addOperation:threadOperation];

[queue addOperation:opertion];

//    [queue addOperation:opertion2];

//    BOOL bool1 = [[NSThread currentThread]isMainThread];

//    NSLog(@"bool1 is %d",bool1);

//    for (int i = 0; i < 10; i ++) {

//        NSLog(@"-----------------main%d",i);

//    }

}

- (void)test{

@autoreleasepool {

// [NSThread sleepForTimeInterval:5];

//    BOOL bool2 = [[NSThread currentThread]isMainThread];

//    NSLog(@"bool2 is %d",bool2);

//    for (int i = 0; i < 10; i ++) {

//        NSLog(@"-----------------test%d",i);

//    }

//    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(run:) userInfo:nil repeats:YES];

//    NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(run:) userInfo:nil repeats:YES];

//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

//

//    [[NSRunLoop currentRunLoop]run];

/*

http://d.hiphotos.baidu.com/image/w%3D310/sign=897718c6bd096b63811958513c328733/ac345982b2b7d0a28fc5db74c8ef76094a369acf.jpg

*/

// NSLog(@"1");

NSString *imgUrl = @"http://g.hiphotos.baidu.com/image/w%3D310/sign=2c97ee80d03f8794d3ff4e2fe21a0ead/f636afc379310a550dcbd3ccb34543a98226101e.jpg";

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrl]];

// _imgView.image = [UIImage imageWithData:data];

[self performSelectorOnMainThread:@selector(show:) withObject:data waitUntilDone:NO];

}

}

- (void)run:(NSTimer *)timer{

}

- (void)show:(NSData *)data{

_imgView.image = [UIImage imageWithData:data];

}

//- (void)test1{

//    //[NSThread sleepForTimeInterval:5];

//    BOOL bool2 = [[NSThread currentThread]isMainThread];

//    NSLog(@"bool2 is %d",bool2);

//    for (int i = 0; i < 10; i ++) {

//        NSLog(@"-----------------test111111%d",i);

//    }

//}

				
时间: 2024-12-27 07:34:40

UI中多线程的创建以及定时器与图片的异步加载的相关文章

Android中图片的异步加载

转: 1.  为什么要异步加载图片 下载图片比较费时,先显示文字部分,让加载图片的过程在后台,以提升用户体验 2.  SoftReference的作用 栈内存—引用 堆内存—对象 Eg: Object obj = new Object(); Obj = null; 当垃圾收集器启动时,会回收对象: 当一个对象没有任何引用指向,就会被回收. SoftReference<Object>sr = new SoftReference<Object>(new Obnject()); 引用是软

【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/15334159 cocos2d-x中和Android,Windows都 一样,如果在主线程中处理一些耗时操作,那么主线程就会出现阻塞现象,表现在界面上就是卡住,未响应等情况.为了避免这种情况的出现,我们需要在后台开辟 工作线程进行数据的处理,再采用消息传递或者其他形式来通知主线程进行UI变化.最常见的情况就是游戏进入前的loading. 1.图片的异步加载 在多线程和同步的第

ListView的异步加载(笔记,多线程和AsyncTask)

异步加载最常用的两种方式: 多线程,线程池     AsyncTask 实例操作: 从一个网站上获取Json数据,然后将数据在ListView上显示. 1.创建item_layout布局 , 修改主界面布局 item_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/re

Swift - 异步加载各网站的favicon图标,并在单元格中显示

下面是一个简单的应用,表格视图的各个单元格自动异步加载各个网站的favicon图标,并显示出来. 主要是复习下如何自定义单元格,单元格中图片的异步加载,以及didSet的用法. 效果图如下: 操作步骤: (1)先创建单元格类 - FaviconTableViewCell.swift 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

【Android】纯代码创建页面布局(含异步加载图片)

开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 Fragment 中,采用 ScrollView + LinearLayout 实现. 1 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http:/

IOS中UITableView异步加载图片的实现

本文转载至 http://blog.csdn.net/enuola/article/details/8639404 最近做一个项目,需要用到UITableView异步加载图片的例子,看到网上有一个EGOImageView的很好的例子. 但是由于,EGOImageView的实现比较复杂,于是自己就动手做了一个AsynImageView,同样可以实现EGOImageView的效果. 而且自己写的代码比较清晰,容易理解,同样可以实现指定placehoderImage以及指定imageURL,来进行图片

Android异步加载全解析之使用多线程

异步加载之使用多线程 初次尝试 异步.异步,其实说白了就是多任务处理,也就是多线程执行,多线程那就会有各种问题,我们一步步来看,首先,我们创建一个class--ImageLoaderWithoutCaches,从命名上,大家也看出来,这个类,我们实现的是不带缓存的图像加载,不多说,我们再创建一个方法--showImageByThread,通过多线程来加载图像: /** * Using Thread * @param imageView * @param url */ public void sh

浅谈android中的异步加载一

1.为什么需要异步加载. 因为我们都知道在Android中的是单线程模型,不允许其他的子线程来更新UI,只允许UI线程(主线程更新UI),否则会多个线程都去更新UI会造成UI的一个混乱有些耗时的操纵(例如网络请求等),如果直接放到主线程中去请求的话则会造成主线程阻塞,而我们系统有规定的响应时间,当响应的时间超过了了阻塞的时间就会造成"Application No Response",也就是我们熟知的ANR错误解决上述问题的时候:我们一般使用的是线程或者线程池+Handler机制如果线程

Android之ListView异步加载图片且仅显示可见子项中的图片

折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整实例都没看到,只有自己一点点研究了,总体感觉 android 下面要显示个图片真不容易啊. 项目主要实现的功能: 异步加载图片图片内存缓存.异步磁盘文件缓存解决使用 viewHolder 后出现的图片错位问题优化列表滚动性能,仅显示可见子项中的图片无需固定图片显示高度,对高度进行缓存使列表滚动时不会