http://www.cnblogs.com/ygm900/archive/2013/06/23/3151691.html

第一步:开启子线程

    //开启子线程到网络上获取数据
myFirstThread = [[NSThread alloc]initWithTarget:self selector:@selector(thread1GetData) object:nil];
[myFirstThread setName:@"第一个子线程,用于获取网络数据"];
[myFirstThread start];

第二步:子线程的方法

//获取数据
-(void)thread1GetData
{
while (!myFirstThread.isCancelled) { // 关键
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
//通过接口获取数据 (字典格式)
self.dic_base64TabelViewDataSource = [self getDataFromInterFace]; //将数据字典转换成可以直接显示的cellview nsma_CellViews 相当于终极数据源
self.nsma_CellViews = [self orderDataForTableViewWithDictinary: self.dic_base64TabelViewDataSource]; //用数据源 nsma_CellViews 更新用户界面
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:YES]; // [NSThread sleepForTimeInterval:0.09]; //不用亦可
[pool release];
[NSThread exit]; //关键 }
}

第三步:结束子线程

-(IBAction)btnBack:(id)sender
{
//释放内存 仅仅remove 并不会触发内存的释放 if (!(mySecondThread==nil) && !myFirstThread.isCancelled) {
[myFirstThread cancel]; //等子线程结束再跳出循环
int i=0;
while (!myFirstThread.isFinished){
NSLog(@"mySecondThread还没有结束 %i",i++);
}
} //其它操作

iOS中使用子线程的完整方法的更多相关文章

  1. vc中主线程等待子线程退出的方法

    VC线程同步,在子线程中等待另一子线程结束,通过WaitForSingleObject可以实现,但是如果在主线程中等待子线程结束,这个函数是无法完成要求的,因为它会造成主线程挂起,导致程序死掉.我们可 ...

  2. iOS 报错:(子线程中更新UI)This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.

    今天在写程序的时候,使用Xcode 运行工程时报出下面的错误错信息,我还以为是什么呢,好久没遇到过这样的错误了. **ProjectName[1512:778965] This application ...

  3. 2017-11-29 由runnable说起Android中的子线程和主线程

    1.首先纠正一个观点,就是runnable运行在子线程中是错误的观念.runnable只是创建了一个执行任务的对象,但是它本身并不会创建一个新的子线程,Runable只是给你接口让你实现工作线程的工作 ...

  4. iOS中的GCD线程

    一.什么是GCD      全称是Grand Central Dispatch ,纯C语言编写,提供非常多强大的函数,是目前苹果官网推荐的多线程开发方法,NSOperation 便是基于GCD的封装 ...

  5. iOS中的NSOperation线程

    1.除NSThread之外的第二种多线程的编程方法   2.采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperat ...

  6. Java中怎样创建线程安全的方法

    面试问题: 下面的方法是否线程安全?怎样让它成为线程安全的方法? class MyCounter { private static int counter = 0; public static int ...

  7. Android子线程创建Handler方法

    如果我们想在子线程上创建Handler,通过直接new的出来是会报异常的比如: new Thread(new Runnable() { public void run() { Handler hand ...

  8. iOS中进程与线程(多线程、主次线程)

    一.什么是线程?什么是多线程?              线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B.为了同时执行两个任务,产生了多线程. 例子: 打开一个音乐软件,用户开辟一个线程A ...

  9. IntentService用于服务中开启子线程的自动关闭

    package com.pingyijinren.test; import android.app.IntentService; import android.content.Intent; impo ...

随机推荐

  1. [SQL]insert、update 表触发器应用的demo

    --创建测试表 create table student ( stu_id int ,libraryCardNo varchar() ) create table borrowbook ( b_id ...

  2. MSSQL中的随机函数

    随机函数:rand()在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会 ...

  3. 关于WebView的内存泄露问题

    在一个Activity中包含着一个WebView,通过WebView不停的访问Web页面,会发现内存会一直增长,退出此Activity,甚至杀死此Activity,内存依然没有被释放.这就导致,即使是 ...

  4. How to Modify Public Network Information including VIP in Oracle Clusterware (文档 ID 276434.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.3 to 12.1.0.2 [Release 11.2 to 12. ...

  5. JAVA~多线程:sleep、yield方法

    sleep不考虑其它线程的优先级 yield让位给相同或更高优先级的线程 sleep yield package multiThread2; public class TestThread042Yie ...

  6. svn执行clean up命令时报错

    svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrupted”.无论你到那个父 ...

  7. No.011 Container With Most Water

    11. Container With Most Water Total Accepted: 86363 Total Submissions: 244589 Difficulty: Medium Giv ...

  8. JavaScript常用代码段

    总结一下在各种地方看到的还有自己使用的一些实用代码 1)区分IE和非IE浏览器 if(!+[1,]){ alert("这是IE浏览器"); } else{ alert(" ...

  9. linux设置ulimit值永久生效

    小知识的积累,转自 http://hi.baidu.com/moonelf9989/blog/item/1deadf12780fa0c5c2fd789d.html linux 默认打开文件数linux ...

  10. .NET Reflector反编译的方法

    首先启动.NET Reflector,然后添加进入dll或exe.然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录. 到这一步骤时,稍等一会,就能够在指定目录就 ...