扬庆の博客

扬庆の博客

寒江孤影,江湖故人。

Flutter初尝试
Flutter第一天笔记📒官方参考资料Dart 语言 官方说明书 Dart代码格式 Dart编辑器 练习语法 Dart 指导中文版 Flutter中文官方 Flutter中国开源项目 Flutter Widget介绍 Flutter官方网站:https://flutter.dev/ Flutter官方文档:https://flutter.dev/docs Flutter中文网:https://flutter.cn/ Flutter示例应用:https://flutter.dev/showcase Flutter开发者论坛:https://flutter.dev/community 构...
SwiftUI-画圆形可控制进度
SwiftUI 健康圆环并控制进度显示123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081import SwiftUIstruct ReviewContentView: View { @State private var progressExternal = 0.3 @State private var progre...
Swift使用AutoLayout布局
swift 使用AutoLayout自动布局NSConstraint 12345678910111213141516171819202122232425262728293031323334353637private func setupUI() { layer.cornerRadius = 4 layer.masksToBounds = true backgroundColor = UIColor.red contentView.addSubview(spaceNameLabel) contentView.addSubview(da...
tableView嵌套collectionView
tableView 嵌套 collectionView 应用场景: 评论界面。 使用UICollectionView 布局一个可复选, 自适应宽度的标签选择控件。 步骤: 选用 UICollectionView AutoLayout布局。 外部主控制器传入数据, 刷新, 并加载初始化状态 主控制器刷新layout UICollectionViewFlowLayout 布局方式, 根据系统返回的[UICollectionViewLayoutAttributes]去动态的计算排列方式 . 123456789101112131415161718192021222324252627282...
KVO
KVO key value observing 键值监听。当指定对象的属性被修改后,允许对象接收到通知的机制。 又叫作观察者模式 KVO 先看下面 kvo 代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253//// ViewController.swift// testKVO//// Created by dayu on 2022/2/25.//import UIKit// Swift里KVO不需要像OC里那样手动释放,系统自动释...
多线程-信号量Dispatch_Semaphore
信号量(Dispatch Semaphore)GCD中信号量,指的是 Dispatch Semaphore ,是持有计数的信号。 信号量提供了三个函数 应用 保持线程同步,将异步任务转换为同步执行任务 保证线程安全,为线程加锁 保持线程同步 异步任务转换为同步 执行任务 123456789101112131415161718192021222324252627282930dispatch_semaphore_create:创建一个 Semaphore 并初始化信号的总量。dispatch_semaphore_signal:发送一个信号,让信号总量 +1。dispatch_sem...
多线程之线程组
线程组dispatch_group_async 使用场景: 在n个耗时并发任务都完成后,再去执行接下来的任务(通过notify)。 比如: 在n个网络请求完成后去刷新UI页面。 12345678910111213141516171819202122232425- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 并发队列 dispatch_queue_t concur...
多线程之栅栏函数
多线程-栅栏函数dispatch_barrier_async 使用实例 使用GCD实现多读单写? 多个读者同时读取数据, 而在读的时候不能写入数据。并且,在写的过程中,不能有其他写者去写。即读者之间是并发的,写着与读者或其他写者是互斥的。 这里的写处理,就是通过栅栏的形式去写。 可以用dispatch_barrier_sync(栅栏函数)实现。 12345678910111213141516171819202122232425262728293031- (void)viewDidLoad { [super viewDidLoad]; // ...
死锁
多线程——死锁 死锁,就是队列引起的循环等待。 比较常见的例子: 主队列同步 任务添加到主队列(队列: 执行任务的等待的队列), 同步执行,即需要立即执行,(同步: 会造成线程堵塞) , 添加到主队列也就意味着当前任务执行完成才能执行下一个任务(添加到主队列的这个任务); 就会导致当前任务等待刚才添加到主队列的任务执行完才会执行, 而主队列下当前执行的任务又是遵循FIFO先进先出原则,添加到主队列的任务又需要等待当前任务执行完才会继续执行, 就造成了互相等待, 死锁. 看下面代码: viewDidLoad当前任务被 NSLog(@"deal lock");这个...
avatar
扬庆
一个程序猿的自我修养📚