消息处理方法
创建文件
//
// IOSApp.swift
// Dome2test
//
// Created by 郭文亮 on 2018/11/22.
// Copyright © 2018年 finalliang. All rights reserved.
//
import Foundation
class IOSApp: NSObject {
@objc func printinformation(){
print("Interactive futorials fox Xcode")
}
@objc func buyApp(_ app:String){
print("Buy the app:\(app)")
}
控制视图添加调用代码
//
// ViewController.swift
// Dome2test
//
// Created by 郭文亮 on 2018/11/22.
// Copyright © 2018年 finalliang. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let app = IOSApp()
//判断对象是否存在 以某个名称命名的方法
if (app.responds(to: Selector(("printinformation")))) {
//调用对象的指定方法 这种方式,是由运行时系统 负责去找对应的方法 编译时不做校验
app.perform(Selector(("printinformation")))
}
if (app.responds(to: Selector(("buyApp:")))) {
app.perform(Selector(("buyApp:")),with:"Excl interactive tutorials")
//还可以增加延迟执行的功能
app.perform(Selector(("buyApp:")),with:"photoshop tutorials",afterDelay:2)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
PerformSelector方法的延迟执行
如何使用RunLoop延迟运动的执行
//
// ViewController.swift
// Dome2test
//
// Created by 郭文亮 on 2018/11/22.
// Copyright © 2018年 finalliang. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
//用来表示加载状态
var stillLoading = true
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel(frame: CGRect(x: 100, y: 100, width: 100, height: 30))
label.text = "waiting"
label.tag = 1
self.view.addSubview(label)
//执行一个方法 并设置延迟时间为0s
self.perform(#selector(ViewController.threadEvent), with: nil, afterDelay: 0.0)
}
@objc func threadEvent(){
//执行一个方法 并设置延迟时间为2s
self.perform(#selector(ViewController.workInBackground), with: nil, afterDelay: 2.0)
//这条语句将使方法一直处于执行状态。知道stillLoading为false为止 以此实现线程的阻塞
while stillLoading {
RunLoop.current.run(mode: .defaultRunLoopMode, before: Date.distantFuture)
print("11")
}
//当跳出循环时 隐藏标签
self.view.viewWithTag(1)?.isHidden = true
}
@objc func workInBackground(){
//将stillLoading设置为false 以清除线程的阻塞
print(">>>>>>>>>>>>>")
stillLoading = false
}
override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
}