• [Xcode 实际操作]八、网络与多线程-(19)使用RunLoop使PerformSelector方法延迟动作的执行


    目录:[Swift]Xcode实际操作

    本文将演示使用RunLoop使PerformSelector方法延迟动作的执行。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

     1 import UIKit
     2 
     3 class ViewController: UIViewController {
     4 
     5     //添加一个布尔属性,用来标识加载状态
     6     var stillLoading = true
     7     
     8     override func viewDidLoad() {
     9         super.viewDidLoad()
    10         // Do any additional setup after loading the view, typically from a nib.
    11         
    12         //创建一个位置在(100,100),尺寸为(100,30)的显示区域。
    13         let rect = CGRect(x: 100, y: 100,  100, height: 30)
    14         //初始化一个标签对象,设置标签对象的位置和尺寸信息
    15         let label = UILabel(frame: rect)
    16         //设置标签对象的显示内容
    17         label.text = "Waiting"
    18         //给标签对象设置标识值,一边将来通过标识值,来调用标签对象。
    19         label.tag = 1
    20         //将标签对象,添加到当前视图控制器的根视图
    21         self.view.addSubview(label)
    22         
    23         //执行一个方法,并设置延迟执行为0秒,即立即执行该方法
    24         self.perform(#selector(ViewController.threadEvent), with: nil, afterDelay: 0.0)
    25     }
    26     
    27     //添加一个方法,用来响应定时事件
    28     @objc func threadEvent()
    29     {
    30         //执行一个方法,并设置延迟执行为2秒,即等待2秒后,执行该方法
    31         self.perform(#selector(ViewController.workInBackground), with: nil, afterDelay: 2.0)
    32         
    33         //添加一条while语句,这条语句将使方法一直处于执行状态,
    34         while stillLoading
    35         {
    36             //直到布尔变量值为假,才会跳出当前循环,以此实现线程等待阻塞
    37             RunLoop.current.run(mode:.default, before: Date.distantFuture)
    38         }
    39         
    40         //当程序跳出当前的循环语句时,隐藏标签对象
    41         self.view.viewWithTag(1)?.isHidden = true
    42     }
    43     
    44     //添加一个方法,用来响应定时事件
    45     @objc func workInBackground()
    46     {
    47         //将变量的值设为否,以清除线程的阻塞
    48         print(">>>>>>>>>>>>>>>>>>>")
    49         stillLoading = false
    50     }
    51 
    52     override func didReceiveMemoryWarning() {
    53         super.didReceiveMemoryWarning()
    54         // Dispose of any resources that can be recreated.
    55     }
    56 }
  • 相关阅读:
    JavaScript
    HTML
    DockerDesktop安装mysql
    c语言ld returned 1 exit status😂
    eclipse项目导入idea jdk版本不一致😵
    markdown语法
    【Kali】Kali Linux更新5.2.9后 Vmware Workstation无法正常启动
    【NetDevOps】网络自动化运维--1获取用户基本信息
    【NetDevops】网络自动化运维--1获取用户基本信息
    Kali Linux中安装Python虚拟环境
  • 原文地址:https://www.cnblogs.com/strengthen/p/10069012.html
Copyright © 2020-2023  润新知