zoukankan      html  css  js  c++  java
  • performSelector

    http://blog.csdn.net/baxiaxx/article/details/7878338

    一、- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

    知识点:这个方法是单线程的,也就是说只有当前调用此方法的函数执行完毕后,selector方法才会被调用。

    - (void)mainMethod
    {   
        [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1];
    
        NSLog(@"调用方法==开始");
        
        sleep(5);
        
        NSLog(@"调用方法==结束");
    }
    
    - (void)delayMethod
    {
        NSLog(@"执行延迟方法");
    }
    
    执行结果(注意log打印的顺序):
    
      调用方法==开始
      调用方法==结束
      执行延迟方法

    二、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

    多线程,YES:一直等aSelector 的方法执行完,才接着向下执行

    三、performSelector的内存问题

    http://blog.csdn.net/baxiaxx/article/details/7878110

    最后总结:

    performSelector是一个很有用的函数,跟它打过不少交道,经过血与泪的教训,总结一下它的使用如下:

    使用前先检测一下,

    SEL testSelector = @selector(test:);   

     if([tester respondsToSelector:testSelector])  

      {  

              //如果响应就执行

              [tester test:@"invoke test method"];  

      }

    使用后,如果有必要,需要显示的调用cancelPreviousPerformRequestsWithTarget:selector:object: ,否则有可能产生内存泄露,而且这种内存泄露很难发现,因为它并不违反任何规则,所以一定要注意!

  • 相关阅读:
    从多渠道打包与友盟统计有这一篇就够了
    多渠道打包
    studio构建错误Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifest.xml:38:5-79 dupli
    ADB命令与monkey
    正则表达式和文本挖掘(Text Mining)
    一步一步教你使用Git
    Android常见开源解决方案
    Android Intent到底能做些什么
    支付宝集成
    Theano 学习三 conv2d
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/4030657.html
Copyright © 2011-2022 走看看