这是在iOS中调用方法的正确方法

Kru*_*nal 1 objective-c method-call

我曾经使用iOS,但我没有得到这个所有方法有什么区别,

我应该使用哪种语法来调用MehodName

 (1) [self MehodName];

 (2) [self performSelector:@selector(MehodName) withObject:nil];

 (3) [self performSelectorInBackground:@selector(MehodName) withObject:nil];

 (4) [self performSelectorOnMainThread:@selector(MehodName) withObject:nil waitUntilDone:YES];

 (5) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                         (unsigned long)NULL), ^(void) {
    [self MehodName];
});

  (6) dispatch_sync(dispatch_get_main_queue(), ^{
     [self MehodName];       
});
Run Code Online (Sandbox Code Playgroud)

请提前帮助和谢谢.

Din*_*hik 9

根据您的要求,所有方式都是正确的方式

(1)在当前执行代码的线程所在的同一线程上执行该方法.(可以是后台线程或主线程).

(2)1和2非常相似,但(2)的优点是可以动态确定在运行时调用哪个选择器.

(3)与[NSThread detachNewThread]相同,它创建一个新的线程(表示未在主线程上执行的选择器),通常用于webService图像获取等.

(4)在主线程上执行选择器(通常用于执行UI更改)如果在此线程上执行的方法太长或太重,则在该持续时间内挂起应用程序,因为该方法在优先级上执行

(5)调度异步用于执行可以异步完成的任务,在你的情况下使用(全局队列是并发队列)(在当前情况下不在主线程上执行)(如重型数据库插入)背景图像获取,那些在完成后稍后回调的方法

(6)dispatch sync同步执行该方法(在主线程的情况下)(通常用于登录操作,验证等).