- 博客(206)
- 收藏
- 关注
原创 一端独立开发的小感悟
产品能力比研发能力更重要,产品觉得是否满足用户需求商业闭环更重要,只有形成收益闭环,一个项目才有成长迭代的可能技术只是其中一个环节,技术好可以实现,是必要条件; 技术不行,无法实现需求,那么整个项目就是空谈技术实现了需求,收费模式确立,最后还差市场销售和运营,才能完成价值体现的最后一环那么,作为独立开发,如何能完成所有项以实现闭环...
2025-03-10 11:56:00
72
原创 大龄程序员思考
视觉AI很难做近来一直在从事AI 视觉检测方面的工作,外行人可能觉得挺厉害,实际上这钱挣得基本等于搬砖近两年以来,行业不景气、制造业利润上不去,那么在这个产业链中,老板就没有余钱来进行升级改造。老板们是否愿意花钱投入视觉检测,一是老板的认知、二是是否有足够的资金实力; 就算最后,老板有需求,也得经过招标投标的工作,也不一定会找你。从技术角度上看,视觉相关的比如、配置检查、缺陷检测、测量引...
2024-05-31 13:01:00
293
原创 苹果开发者是否审核歧视中国开发者?傲慢无耻的苹果公司
说来惭愧,作为差不多10年的开发者,第一次尝试提审,结果却收获来了苹果无休止的等待我从4月24日替身,后续到现在没有任何回馈,只告诉你 other 原因拒绝,请问苹果是只针对中国开发者,还是所有开发者?如果一个账户按年计费,一次等待按照一个月起算,耽误多少开发者的时间和金钱。我知道苹果一向傲慢,却不知道为何如此傲慢,尤其是在苹果全球销量下滑的情况下,一方面依赖中国市场、一方面傲慢对待中...
2024-05-14 21:55:00
468
原创 2024年感想
看了一眼之前到博客,最近的一次博客还在一年之前,时间如白驹过隙,飞快流逝。这两年生活和工作都经历里很多,想想是应该在这里好好梳理总结下。我总是感慨,自己从二十六七岁到现在三十多的年纪,好像经历别人的半辈子,感悟众多。 我以前是个朋友众多的人,现在30多的年纪,除了家庭工作两点一线的生活,已经很少和朋友之间的交集,就算是微信上曾今的朋友突然拉的群,也顿感压力,不知道又有何事。我现在只想落得...
2024-05-02 13:55:00
479
原创 Flutter TextField开始输入中文的时候,被打断导致错误输入字母问题
一、Bug样例建立一个web demoflutter run -d chrome --web-renderer html 出现问题: 输入中文的时候,比如打字 hao, 第一个字母h会先输入,变成h奥二、解决 网上资料说是因为在text onChange中使用了setState刷新会打断输入,实际测试,就算不设置onChange, 不设置controller,一样会导...
2023-03-03 17:07:00
983
原创 2022到2023
2022年到2023年,工作内容发生了很大变化。原来在字节主要做iOS平台上的业务开发,使用Swift语言。后面新的工作内容主要做IoT相关,不再局限在移动端,而是围绕整个IoT系统。从iOS介入到后端开发之后,处理事情发生很多的变化。移动端属于大前端,比较关注业务功能,用户体验,性能指标;而后端集中在系统架构设计,数据存储和迁移,以及请求并发和分布式;虽然关注的领域有所不同,但是二者核...
2023-03-03 16:22:00
457
原创 iOS 后台录音Tweak实现参考--stackoverflow
up vote9down voteaccepted+50"Audio Recorder" is indeed a very simple tweak. The author tried to obfuscate important parts of his tweak (which function is being hooked), but here is what I f...
2022-11-07 17:29:42
494
原创 Xcode Debugger Extremely Slow , Xcode Swift调试器调试时极其慢()
一、Xcode 调试器 我的项目是国内某办公软件的iOS客户端, 代码量极其庞大, 编译一次至少30min以上。 关键是,如果你遇到问题的时候,调试下断点,需要至少5min才能断下来,走下一步,又重复同样的流程二、问题排查 实在忍受不了,只能在网上寻找方案, 只有说遇到类似的情况的, 但是没有有效的解决方案 比如 stack overflow上面: https://stac...
2022-02-25 19:46:00
1002
原创 GCD系列 一 使用DispatchWorkItem (3)
DispatchWorkItemDispatchWorkItem是封装work的对象,可以监听work完成的通知,并指定和其他DispatchWorkItem之间的依赖关系。A DispatchWorkItem encapsulates work to be performed on a dispatch queue or within a dispatch group. You can also use a work item as a DispatchSource event, registrat
2022-02-24 19:59:03
1031
原创 为什么SwiftUI使用struct, 限制使用class
前言在学习SwiftUI所有的地方,视图元素都定义一个struct并实现View协议,该协议定义body变量返回View类型。但是为什么,这里一直是指定的struct, 而不是class呢?尝试使用class如果你使用class 在SwiftUI中定义一个View,那么你将遇到一个编译器的错误Protocol 'View' requirement '_makeView(view:in...
2022-02-23 15:49:00
2348
原创 GCD系列 一 使用队列(2)
GCD 队列使用文档先看官方文档, DispatchQueue 是一个class对象,继承自 DispatchObject;DispatchObject 实现了 OS_object 中的方法, 猜测 OS_object 可能是一个协议,文档中没有查找到先看 DispatchObject:func activate() Activates the dispatch object.func resume() Resumes the invocation of block objec
2022-02-18 18:38:06
1650
原创 GCD系列 一 整体介绍 (1)
GCD是什么按照官方文档的解释,针对在多核系统上运行并发执行程序,提供了系统性的支持。支持包含语言中的方法,以及运行时库。可以应用在macOS、iOS、watchOS、tvOS上Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive im
2022-02-18 12:12:25
1208
原创 iOS中关于GCD的系列文章
背景GCD作为iOS、MacOS平台上开发上多线程常用的库, 同时也是面试中常见的问题,我将撰写一个系列的文章,力图阐明所有的细节,深刻理解其原理,帮助自己和大家提升对多线程编程的认识。目录GCD系列一整体介绍...
2022-02-18 11:35:37
828
原创 Swift中结构体传参写时拷贝问题
问题Swift中的结构体是值类型,在方法中作为参数传递的时候,通常会拷贝一份,那么如果这个结构体很大或者方法调用次数很多,是否会存在性能问题呢。实际上这种情况比较极端,很难发生值类型的传参优化Swift内置基本类型使用COW(写时复制);对于你自定义的结构体,其中必然包含基本的值类型,其元素也会采用COW,这样就不用过于担心struct拷贝的开销In practice, this is rarely an issue, because we’re frequently using native
2022-02-16 18:22:38
681
原创 SwiftUI Stack中的View被压缩的效果
一、背景 我们在布局中,经常会遇到视图元素排列时空间不足或者空间过大的情况,在这种场景下面,不同的布局方式有不同的方法: 绝对布局frame:纯靠计算过程控制,获取父视图的大小,根据需求,计算自己需要的大小,并设置到frame上去 iOS autolayout:这里更先进一点,将视图中的约束预设进布局的DSL中,当视图的尺寸发生变化的时候,根据DSL描述修改视图的尺寸,这个是自动化完...
2022-01-13 18:53:00
395
原创 Swift 计算字符串展示的区域
一、如果是普通文本,那么可以采用NSString的方法,代码如下:import UIKitimport PlaygroundSupportclass MyViewController : UIViewController { override func loadView() { let view = UIView() view.backgroun...
2022-01-13 11:37:00
495
原创 FlexBox 行间距
问题背景在Flex布局方式下, 父容器约定是换行的方式, 不足以容纳一行子元素的时候, 会单独进行折行, 那么折行的行间距如何处理呢?解决办法通过在子Item上面设置margin-top可以模拟出折行之后, 下面一行距离上面一行的间距;但是这样操作之后, 会导致第一行和父容器的间距增大, 通过设置父容器的margin-top为相同的负值, 可以抵消这个间距代码如下:.flex-co...
2021-09-23 13:39:00
816
原创 swift_slowAlloc Crash 分析
一、Crash详情Crash类型exception EXC_BREAKPOINT (SIGTRAP)reason EXC_BREAKPOINT EXC_ARM_BREAKPOINT fault_address:0x0000000185ba6824Crash堆栈0 libswiftCore.dylib 0x0000000185ba6824 swift_slowAlloc.cold....
2021-09-22 18:23:00
515
原创 Swift Lazy计算属性的线程安全分析
一、代码示例//// ViewController.swift// LazyTest//// Created by lilun.ios on 2021/7/30.//import UIKitclass ViewController: UIViewController { lazy var profileImageView: UIImageView =...
2021-07-30 19:00:00
360
原创 Swift全局变量的线程安全分析
一、示例代码import UIKitlet obj = TestObj()class TestObj { init() { print("\(type(of: self)) init") }}class ViewController: UIViewController { func test() { let x ...
2021-07-23 15:45:00
431
原创 Swift 与 Objc Exception
一、背景 Swift具备完善的Error handle机制,对于纯Swift下面的Error,在编码的时候能够正确处理。 在使用try? 处理抛出Error的方法的时候,会忽略Error,直接返回nil二、Swift 与 Objc下面的Exception 下面的代码是经常遇到的一种场景,Swift序列化 private func serialize(message: Me...
2021-07-13 16:08:00
233
原创 Swift 模式下面LLDB 输出对象
(lldb) expr -l Swift -- import UIKit(lldb) expr -l Swift -- let $pin = unsafeBitCast(0x7f81c8d459f0, to: UILabel.self)(lldb) expr -l Swift -- print($pin.text)
2021-06-18 11:04:00
143
原创 Understanding Swift’s value type thread safety - 代码分析(二)
示范代码`func testScenarioA2() throws { var store: Int = 100 DispatchQueue.concurrentPerform(iterations: 1_000_000) { _ in store.negate() _ = store }}`开启线程race诊断后,出现以下错误...
2021-04-08 21:13:00
202
原创 Understanding Swift’s value type thread safety - 代码分析(一)
结构体并不代表线程安全,swift在此上未做保证 func testScenarioA() throws { var store: Int = 0 DispatchQueue.concurrentPerform(iterations: 1_000_000) { i in store = i _ = st...
2021-04-02 23:23:00
118
原创 多线程交替输出字符串(2)
与上一篇逻辑类似,这里采用同样的生产者消费者模式创建线程使用了BlockOperation封装操作,使用OperationQueue作为并发队列代码如下:import Foundationvar run: Bool = true/// 将字符转成UInt8func charToInt(chr: Character) -> UInt8? { return chr.asc...
2021-03-13 16:05:00
137
原创 多线程交替输出字符串(1)
看到一个题目,多个线程交替输出 AB0CD1EF2GH3... 这个可以使用多种实现,主要考察线程之间的同步方式。 线程之间的同步方式有多种,这里采用第一种import Foundationvar run: Bool = true/// 将字符转成UInt8func charToInt(chr: Character) -> UInt8? { return ch...
2021-03-12 21:51:00
186
原创 Specs satisfying the `flutter_twitter (from `.symlinks/plugins/flutter_twitter/ios`)` dependency wer...
MXFlutter的依赖发生变化,需要将iOS最低系统版本提高修改之后,进入到MXFlutter目录,执行 flutter run 发现编译错误咨询了下,mxflutter需要flutter为用Flutter 1.20.3 版本进入flutter目录,执行git checkout tags/1.20.3再回到mxflutter,执行cleanflutter clean...
2021-03-10 10:50:00
1265
原创 Swift 属性装饰器
import ArgumentParser@propertyWrapperstruct WrapperTest { internal var innerValue: Int { didSet { print("didSet called \(oldValue)") } willSet { ...
2021-03-04 22:23:00
215
原创 Swift Copy On Write 多线程下面的资源竞争
Swift中的String、Array、Dictionary等容器类型默认实现了写时复制,这个操作在多线程下面可能会带来错误https://bugs.swift.org/browse/SR-6543
2021-02-23 17:51:00
232
原创 关于DateFormater
一、关于时间的解析let dateFormatter = DateFormatter()dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"//dateFormatter.timeZone = TimeZone.current//dateFormatter.locale = Locale.currentlet date = dateFor...
2020-06-18 15:08:00
405
原创 Swift 排查引用循环
------------恢复内容开始------------一、最近使用RxSwift在多次信号的嵌套中,发现一个对象始终始终无法释放 开始想通过Memory Graph验证是否没有释放,一直报错,后来确认是Xcode的bugNo reply dictionary received from LeakAgent request 始终无法确认问题,只能考虑使用一个弱引用的数...
2020-04-29 23:59:00
238
原创 AutoLayout与UIbutton
1、UIButton贴近右边,高度固定,宽度跟随标题变化class TestButton: UIButton {}class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let btn = TestButton(type:...
2019-11-07 21:29:00
131
原创 UIScrollView 在Autolayout下使用的一些问题
一、UIScrollView 双指放大手势,双击放大实现 在设置UIScrollView的frame后、maxZoomScale 和 minZoomScale之后,UIScrollView会自然支持双指捏合的手势,自然支持放大缩小 对于双击的手势,只要添加一个tap双击的识别器,然后在响应的时候,计算出来放大缩小之后的中心点(需要加上当前点击位置的向量),得到最终的rect就行了二、A...
2019-07-22 14:02:00
116
原创 sourceTree .gitignore文件处理
最近犯了个低级错误,在sourceTree中通过右键,直接将 工程文件加入到 ignore列表中。提交之后,别人拉下来代码一直显示报错 在意识到上面这个错误之后,一直想恢复却恢复不了,尝试从SorceTree 偏好设置中也不行 后来发现,在git根目录下面还有一个叫做 .gitignore到隐藏文件,所有忽略到文件列表在这个目录中, 执行ls -d .* , 就能看...
2019-07-17 11:49:00
244
原创 Mp4V2与ffmpeg静态库符号冲突问题解决
一、为什么静态符号会冲突 无论macho二进制类型,还是Windows上的PE格式,还是Linux上的ELF格式,里面都是按照特定格式存放的一个程序的代码和数据 比如Linux下的可执行文件格式,大致分为下面这些段 参考:https://www.ibm.com/developerworks/cn/linux/l-excutff/ 不同操作系统支持的可执行文件格式不一样,但...
2019-06-29 15:24:00
319
原创 iOS 处理HLS视频流
一、HLS介绍 HLS是苹果主导的音视频传输协议,其主要的格式是一个索引文件(M3U8)+ ts分片的视频文件。 HLS的优势是iOS系统天然支持,通过Http 80传输,规避了常规的防火墙问题。 视频的分片方便服务器CDN对视频文件分发缓存。 HLS支持视频点播和直播,直播的延时可能达到10s。二、HLS协议内容 完整的HLS协议包含,视频加密标准(MPEG4、H2...
2019-06-27 20:30:00
733
原创 对于UITableView和UIImageView的DrawRect重写之后的影响
一、继承UITableView和UIImageView , 重写DrawRect 方法,然后里面留空 ImageView@implementation DrawImageView- (void)drawRect:(CGRect)rect { // Drawing code}@end Table@implementation DrawTestTable...
2019-06-15 16:21:00
142
原创 UILabel的DrawDrect方法
一、问题 如果继承UILabel实现自己的一个Label,并且在子类的DrawRect方法中留空,什么都不写,会发生什么? 代码如下: VC@interface ViewController ()@property (nonatomic, strong) DrawTestLabel *dwLabel;@end@implementation ViewController...
2019-06-15 15:58:00
144
原创 《iOS面试之道》-勘误2
一、如何保证NSTimer不受Runloop的影响,准时触发 书中提到两种方案, 一种是改变timer加入到runloop中的Mode,为CommonModes不受Runloop的Mode影响 第二种是下面图片中的方案,这个方案中的代码是存在问题的@implementation ViewController- (void)viewDidLoad { [super vi...
2019-05-19 13:59:00
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人