IOS网络、多线程、shareSDK-PerformSelector

消息处理方法

创建文件

//
//  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() }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值