zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    创建型设计模式-原型模式(单例) MemberwiseClone()
    Oracle 查看没有释放的链接 和删除,相关sql
    win10 安装 SQL Developer 工具
    修改nuget包默认存放路径 win10
    使用端口查询
    未能加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0,
    微信错误码
    sqlserver 时间转换记录
    Homebrew 使用指南
    在Mac检查安装的.net core 版本
  • 原文地址:https://www.cnblogs.com/strengthen/p/10069012.html
Copyright © 2011-2022 走看看