iphone多线程-学习记录

原创 2012年03月30日 16:33:37
  • 不是本人原创,只是在学习过程中遇到的问题,对其进行摘录!


  • -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例
  • -(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例
  • -(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
  • +(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上.
  • -(id) performSelector: selector

     

    SEL sel = @selector (start:) ; // 指定action  

    if ([obj respondsToSelector:sel]) 

    { //判断该对象是否有相应的方法  

    [obj performSelector:sel withObject:self]; //调用选择器方法  

    使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象


    [selfperformSelectorOnMainThread:@selector(fetchedData:) withObject:datawaitUntilDone:YES];

    会创建一个新的线程实行fetchedData函数,并传入参数data,并且会等待函数退出后再继续执行。

    - (void)fetchedData:(NSData *)responseData {

    。。。

    }

    用到的类是NSThread类,这里使用detachNewTheadSelector:toTagaet:withObject创建一个线程。

    函数setupThread:(NSArray*)userInfor。通过userInfor将需要的数据传到线程中。

    函数定义:

    -(void)setupThread:(NSArray*)userInfor{

       [NSThread detachNewThreadSelector:@selector(threadFunc:) toTarget:self withObject:(id)userInfor];

    }

    - (void)threadFunc:(id)userInfor{

       NSAutoreleasePool*pool = [[NSAutoreleasePool alloc] init];

       //。。。。需要做的处理。

       //这里线程结束后立即返回

      [self performSelectorOnMainThread:@selector(endThread) withObject:nil waitUntilDone:NO];

      [pool release];

    }



    performSelectorOnMainThread通知主线程执行函数endThread。也可以使用performSelector:onThread:withObject:waitUntil 通知某线程执行线程结束后的处理

    在多线程操作中,有一个著名的错误,叫做“Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread”,一旦出现这个错误,程序会立即crashed。

    这是由于,apple不允许程序员在主线程以外的线程中对ui进行操作(Bug?)

    而笔者在一次http异步操作中也出现过这个错误。当时使用了NSOperation进行了http异步请求,然后使用kvo模式注册观察者,当数据下载完毕后,在主线程中接收下载完毕的通知,并在observeValueForKeyPath方法中使用[tableview reloadData]更新UI。

    这样也导致了上述错误。

     

    解决的方法是使用performSelectorOnMainThread进行ui的更新:

    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:NO];


  • 相关文章推荐

    iPhone开发之多线程入门示例程序

    • 2012年08月18日 21:37
    • 582KB
    • 下载

    iPhone 多线程

    来源:转载(网友发布)  iPhone 多线程  多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主...
    • Koupoo
    • Koupoo
    • 2011年05月21日 15:19
    • 553

    解析iphone多线程

    不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线...

    利用iphone的多线程实现“售票系统”

    Java因为其本身支持多线程而给程序员带来很多方便,其实在iPhone的开发中也支持多线程编程,并且一点也不比java麻烦。   在这篇文章中,笔者就拿大多数Java教程中经典的“售票系统多线程”...

    iphone开发多线程介绍

    不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线...

    iphone多线程

    iphone多线程 这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。 AD: 不管是iphone中还是其他的操作系统,多...

    iphone多线程的使用

    以下是开发初期收集整理的一点资料,简单实用,希望对新人有帮助,都是网络上收集的,原始出处以不明,若侵犯您的权益,请告知,本人将及时删除相关内容。 多线程之NSInvocationOperatio...

    iPhone开发多线程使用与注意事项

    iPhone开发多线程使用与注意事项是本文要介绍的内容,主要介绍一下iPhone SDK中多线程的使用方法以及注意事项。虽然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上...
    • wishfly
    • wishfly
    • 2012年03月21日 01:36
    • 847

    iphone开发使用NSThread和NSInvocationOperation实现多线程

    多线程之NSInvocationOperation 多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOp...

    iPhone SDK中多线程的使用方法以及注意事项 转载

    然现在大部分PC应用程序都支持多线程/多任务的开发方式,但是在iPhone上,Apple并不推荐使用多线程的编程方式。但是多线程编程毕竟是发展的趋势,而且据说即将推出的iPhone OS4将全面支持多...
    内容举报
    返回顶部
    收藏助手
    不良信息举报
    您举报文章:iphone多线程-学习记录
    举报原因:
    原因补充:

    (最多只允许输入30个字)