OC高效率52之多用GCD,少用performSelector系列方法

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    id object;
    [object performSelector:@selector(selectorName)];
    [object selectorName];//两种方法等效

//    动态绑定效果
    SEL seletor;
    int a ;
    if (a==1){
        seletor = @selector(foo);
    }else if (a==2){
        seletor = @selector(bar);
    }else{
        seletor = @selector(baz);
    }
    //performSelector 可能致使内存泄露
    //局限性 能传的参数太少,仅限于对象
    
    //利用GCD来替代   延后执行任务
    [self performSelector:@selector(dosomeThing) withObject:nil afterDelay:5.0f];
    //Use dispatch_after
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 *NSEC_PER_SEC));
    dispatch_after(time, dispatch_get_main_queue(), ^{
        [self dosomeThing];
    });
    
    
    //把任务放在主线程上执行
    [self performSelectorOnMainThread:@selector(dosomeThing) withObject:nil waitUntilDone:NO];
    
    dispatch_async(dispatch_get_main_queue(), ^{
        [self dosomeThing];
    });
    /**
     *   若是想把任务放在另外一个线程上执行,那么最好不要用performSelector系列方法,而是应该把任务封装到块里,而后调用大中枢派发机制的相关方法来实现
     *
     */
    
    
}
-(void)selectorName{

}
-(void)dosomeThing{

}




- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
相关文章
相关标签/搜索