(作业)使用多线程实现一个大数加程序
来源:互联网 发布:ios未越狱修改数据 编辑:程序博客网 时间:2024/06/03 13:08
哎哟,这次作业要使用多线程了,不过读者们不要慌,Swift的多线程如果不设计特别复杂的锁的话,是很简单的,那我们先来看看要求吧
这次的作业要求不多,可能刚接触时会觉得多线程比较麻烦,其实不然,Swift中的GCD已经非常方便了,我们只需要使用它就可以很简单地实现我们的要求。那接下来我们就开始完成需求吧。
首先,我们需要声明一个UILabel控件来显示计算的结果
var label: UILabel!
然后我们需要在界面中添加一个按钮,当我们点击该按钮之后,就开始进行大数加的运算。并且我们为了验证界面是否卡顿,我们需要想界面中添加一个UITextView,并向其中添加多行文字,因为UITextView可以滚动,所以如果我们的界面卡顿的话,UITextView就不能滚动了。
self.view.backgroundColor = UIColor.whitelet btn = UIButton(frame: CGRect(x: 20, y: 50, width: 100, height: 44))btn.setTitle("开始运算", for: .normal)btn.setTitleColor(UIColor.black, for: .normal)btn.setTitleColor(UIColor.brown, for: .highlighted)btn.layer.borderWidth = 1btn.addTarget(self, action: #selector(startCalculate), for: .touchUpInside)self.view.addSubview(btn)label = UILabel(frame: CGRect(x: 20, y: 100, width: 300, height: 44))label.text = "1"label.textColor = UIColor.blackself.view.addSubview(label)let text = """ hhh hhhhhhhhhhhhhhhhhhsaofhweasfdhfewhaflewfweifwifwhsasdf"""let textView = UITextView(frame: CGRect(x: 10, y: 200, width: self.view.frame.width - 20, height: self.view.frame.height - 250))textView.text = texttextView.textColor = UIColor.blacktextView.textAlignment = .centertextView.layer.borderWidth = 1textView.font = UIFont.systemFont(ofSize: 44)self.view.addSubview(textView)
到这里我们的界面就完成了,最后只需要实现按钮的功能即可
@objc func startCalculate() { DispatchQueue.global().async { var number = 0 for num in 1...9999999 { number += num DispatchQueue.main.async { self.label.text = "\(number)" } } }}
在这个方法中,我们首先使用GCD中的全局队列的异步方法进行大数加的运算,没做一次运算就更新UILabel中显示的数据,因为UILabel是界面显示的空间,在Swift中所有对界面的更新要求必须在主线程中进行,因为系统会不定期地刷新界面,如果不在主线程中,那么界面就会出现意想不到的错误,所以Swift要求界面的更新操作必须在主线程中。
然后,就没有然后了,我们可以看看最终运行的效果(对!就是这么简单)
最后贴一下所有的代码吧
ViewController.swift
import UIKitclass ViewController: UIViewController { var label: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = UIColor.white let btn = UIButton(frame: CGRect(x: 20, y: 50, width: 100, height: 44)) btn.setTitle("开始运算", for: .normal) btn.setTitleColor(UIColor.black, for: .normal) btn.setTitleColor(UIColor.brown, for: .highlighted) btn.layer.borderWidth = 1 btn.addTarget(self, action: #selector(startCalculate), for: .touchUpInside) self.view.addSubview(btn) label = UILabel(frame: CGRect(x: 20, y: 100, width: 300, height: 44)) label.text = "1" label.textColor = UIColor.black self.view.addSubview(label) let text = """ hhh hhhh hhhhh hhhhh hhh hsaofhwe asfdh fewh aflew fwei fwi fwh sasdf """ let textView = UITextView(frame: CGRect(x: 10, y: 200, width: self.view.frame.width - 20, height: self.view.frame.height - 250)) textView.text = text textView.textColor = UIColor.black textView.textAlignment = .center textView.layer.borderWidth = 1 textView.font = UIFont.systemFont(ofSize: 44) self.view.addSubview(textView) } @objc func startCalculate() { DispatchQueue.global().async { var number = 0 for num in 1...9999999 { number += num DispatchQueue.main.async { self.label.text = "\(number)" } } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }}
阅读全文
0 0
- (作业)使用多线程实现一个大数加程序
- (作业)使用多线程实现一个网络服务访问程序
- C++实现的一个简单两个大数相加程序!
- 实现一个大数类
- 多线程实现的一个小程序
- 使用多线程方法生成一个死锁程序
- 大数模板-加乘除-String类实现
- java实现大数加、减、乘、除
- 使用多线程方法实现一个死锁程序,用来提醒自己不要犯这样的错误
- 多线程下载加安装程序加RxJava加Fresco
- 使用python多线程实现一个简单spider
- 用java写一个多线程程序,其中两个对一个变量加1,另两个对一个变量减1
- 作业1 编写多线程程序,模拟多个人通过一个山洞。
- Python使用Redis实现一个简单作业调度系统
- 【IMWeb训练营作业】 使用 Vue 实现一个 TODO List
- 使用C++类实现大数加法,大数减法,大数乘法
- C++实现的一个简单的多线程程序
- 一个多线程程序
- 互联网金融业申请评分卡
- Android手机九宫格密码解锁
- [学习笔记]省选算法·莫队
- 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- CF886D Restoration of string
- (作业)使用多线程实现一个大数加程序
- Matlab diag函数功能
- java、exception
- 1043. 输出PATest(20) PAT乙级真题
- vue 项目在另一台电脑各种报错
- halcon的安装
- 怎么寻回参数错误D盘的数据
- javascript中NaN的用法
- Redis事务