Как я могу отложить вызов метода на 1 секунду?

Есть ли простой способ задержать вызов метода в течение 1 секунды?

У меня есть UIImageView который реагирует на событие касания. Когда обнаружено касание, некоторые анимации происходят в приложении. Через одну секунду я хочу вызвать другой метод. В этом случае я не могу использовать селектор animationDidStop .

 performSelector:withObject:afterDelay: 

Ссылка на документ

Вы также можете использовать блок

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [object method]; }); 

Большую часть времени вы захотите использовать dispatch_get_main_queue, хотя, если в этом методе нет интерфейса, вы можете использовать глобальную очередь .

Редактировать:

Версия Swift 3:

 DispatchQueue.main.asyncAfter(deadline: .now() + 1) { object.method() } 

В равной степени DispatchQueue.global().asyncAfter(... также может быть хорошим вариантом.

Лучший способ сделать это:

 [self performSelector:@selector(YourFunctionName) withObject:(can be Self or Object from other Classes) afterDelay:(Time Of Delay)]; 

вы также можете передать nil как с параметромObject.

пример :

 [self performSelector:@selector(subscribe) withObject:self afterDelay:3.0 ]; 

Есть уже много ответов, и все они правильны. Если вы хотите использовать dispatch_after вы должны искать fragment, который включен в Code Snippet Library fragmentа Code Snippet Library в правом нижнем углу (где вы можете выбрать элементы UI ).

введите описание изображения здесь

Поэтому вам просто нужно вызвать этот fragment, написав отправку кода:

введите описание изображения здесь

Вы можете использовать селектор выполнения после того, как метод задержки на 0,1 с вызывается для этого следующего кода для этого.

 [self performSelector:@selector(InsertView) withObject:nil afterDelay:0.1]; 

Вы также можете:

 [UIView animateWithDuration:1.0 animations:^{ self.view.alpha = 1.1; /* Some fake chages */ } completion:^(BOOL finished) { NSLog(@"A second lapsed."); }]; 

В этом случае вам нужно подделать некоторые изменения в какое-то представление, чтобы заставить анимацию работать. Это действительно хак, но я люблю блок-материал. Или заверните @mcfedr ответ ниже.


 waitFor(1.0, ^ { NSLog(@"A second lapsed"); }); 

 typedef void (^WaitCompletionBlock)(); void waitFor(NSTimeInterval duration, WaitCompletionBlock completion) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^ { completion(); }); } 

Вы можете сделать это

 [self performSelector:@selector(MethodToExecute) withObject:nil afterDelay:1.0 ]; 

Swift 2.x

 let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))) dispatch_after(delayTime, dispatch_get_main_queue()) { print("do some work") } 

Swift 3.x – & – Swift 4

 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { print("do some work") } 

Существует решение Swift 3 из проверенного решения:

 self.perform(#selector(self.targetMethod), with: self, afterDelay: 1.0) 

И есть метод

 @objc fileprivate func targetMethod(){ } 

Использование в Swift 3

 perform(, with: , afterDelay:  

ПРИМЕЧАНИЕ. Это приостановит весь stream, а не только один метод.
Сделать вызов для ожидания / ожидания / остановки за 1000 мс перед вызовом вашего метода?

 Sleep(1000); // does nothing the next 1000 mSek Methodcall(params); // now do the real thing 

Изменить: приведенный выше ответ относится к общему вопросу: «Как я могу отложить вызов метода на 1 секунду?», На который был задан вопрос во время ответа (напомните, что ответ был получен в течение 7 минут после исходного вопроса: )). В то время не было информации о языке, поэтому любезно прекратите судить о правильном способе использования сна i XCode и отсутствии classов …

  • Что такое простой способ разбить NSArray с 4000+ объектами в нем на несколько массивов с 30 объектами каждый?
  • Как включить и использовать новые шрифты в iPhone SDK?
  • NULL против нуля в Objective-C
  • Как создать одноэлементный class в объекте C
  • Как Apple знает, что вы используете частный API?
  • UIDatePicker, устанавливающий максимальные и минимальные даты на основе сегодняшней даты
  • Преобразование NSString даты в NSDate
  • Использование Objective C / Cocoa для unescape символов Unicode, то есть \ u1234
  • Изучение основ UIScrollView
  • Полужирный и нежирный текст в одном UILabel?
  • Взаимодействие за пределами UIView
  • Interesting Posts

    Как динамически определять значение атрибута доступа в Spring Security?

    Java: Как проверить методы, которые вызывают System.exit ()?

    Добавление файлов в zip-файл с помощью Java

    Связывание файлов для редактирования на mac

    Изменение групповой политики с использованием окон CMD

    Что такое руководства по вычитанию шаблонов и когда мы должны их использовать?

    Entity Framework. Есть ли способ автоматически загружать дочерние объекты без Include ()?

    Неправильная публикация ссылки на объект Java

    Как я могу получить список всех зарегистрированных пользователей (через весеннюю безопасность), мое веб-приложение

    Java 7 (JDK 7) garbage collection и документация по G1

    Как решить “java.io.IOException: ошибка = 12, Невозможно выделить память” вызов Runtime # exec ()?

    Как определить, поддерживает ли мой SSD (Samsung UM41) команду TRIM?

    “‘Void’ type not allowed here” error (Java)

    JsonConverter с интерфейсом

    Как указать аргументы JVM по умолчанию для программ, которые я запускаю из eclipse?

    Давайте будем гением компьютера.