- 博客(136)
- 收藏
- 关注
原创 pod install报错处理:Failed to connect to github.com port 443 after 75003 ms: Couldn‘t connect to server
Git代理配置解决Pod安装超时问题 当使用pod install拉取GitHub库因网络问题超时时,需配置Git代理而非仅开启全局代理。步骤如下: 查找代理服务器IP和端口(通过系统设置→WiFi→代理查看) 编辑~/.gitconfig文件,添加配置: [http] proxy = http://服务器IP:端口 [https] proxy = http://服务器IP:端口 保存后重新执行pod install即可解决下载问题。 (注:需确保代理服务器信息正确,与浏览器可访问GitHub不同,Git需
2025-12-25 12:13:35
365
原创 sudo gem install cocoapods 报错处理1
摘要:该问题是由于SSL证书验证失败导致无法安装cocoapods,错误显示证书链中存在自签名证书且根证书不受信任。解决方法是通过修改RubyGems配置文件(~/.gemrc),添加ssl_verify_mode: 0来忽略SSL验证,并指定gem源为https://gems.ruby-china.com,然后重新执行安装命令即可。这种方案适用于因公司内网/代理导致证书验证失败的情况。
2025-12-24 13:26:45
370
原创 iOS探究使用Block方式实现一对多回调能力
本文探讨了一种基于Block的回调实现方式,用于iOS开发中一对多的回调场景。通过NSMapTable弱引用存储对象和对应的Block,结合Runtime动态绑定实现自动清理机制。当数据变化时,遍历NSMapTable执行所有有效Block回调,同时利用关联对象监听对象释放,及时清理无效记录。相比通知、KVO等方式,该方法具有代码集中、上下文友好、语法简洁等优势,适用于数据中心等需要一对多回调的场景。
2025-12-17 14:18:11
965
原创 React Native与Flutter的对比
摘要:本文对比了React Native(RN)与Flutter两大移动端跨平台框架的核心差异。RN采用JS桥接原生渲染,依赖原生组件,适合中轻度UI场景;Flutter通过Dart自绘引擎直接操作GPU,性能更优,尤其在动画和复杂UI方面。开发体验上,RN对前端开发者更友好,Flutter需学习Dart但提供更快的热重载。生态方面RN更成熟,Flutter跨端支持更全面。总体而言,RN适合快速迭代项目,Flutter则在高性能、跨端一致性要求高的场景更具优势。
2025-12-10 11:29:59
668
原创 APDU数据格式的使用
APDU(应用协议数据单元)是智能卡通信中的基本数据单位,分为命令APDU(C-APDU)和响应APDU(R-APDU)。C-APDU包含CLA、INS、P1、P2等指令字段,R-APDU包含响应数据和状态字SW1-SW2。常见的状态字包括9000(成功)、6982(需要PIN验证)、6A86(参数错误)等,用于指示操作结果。APDU作为协议数据单元,在不同网络层次对应不同形式,如数据位、帧、包等。该协议定义了智能卡与终端间的标准通信格式和状态响应机制。
2025-12-10 11:01:36
356
原创 TLV格式数据解析
TLV数据结构简介 TLV(Tag-Length-Value)是一种灵活的数据编码结构,由三个核心字段组成: Tag:标识数据类型,通常用1字节表示 Length:记录Value的字节长度,常用定长编码 Value:存储实际数据,可以是基础类型或嵌套的TLV结构 该结构支持无限嵌套,适用于协议封装和复杂数据表示。图示展示了TLV的基本组成形式,其设计兼具简洁性和扩展性,是通信协议中常用的数据封装方法。
2025-12-10 10:41:22
457
原创 iOS 动态库与静态库的区别
静态库和动态库是两种不同的库链接方式。静态库在编译时嵌入目标程序,与程序融为一体,会增加安装包体积且无法共享;动态库则在运行时加载,独立文件可被多个程序共享,节省内存但需处理依赖和签名问题。静态库适用于轻量工具库、无频繁更新的场景,而动态库更适合核心功能库、需单独更新或多程序共享的情况。选择时应根据体积、更新频率和共享需求决定。
2025-12-03 13:16:43
383
原创 iOS 内存管理之 autoreleasePool
摘要 自动释放池(autoreleasePool)是一种延迟释放对象的机制。其核心实现是AutoreleasePoolPage构成的双向链表结构,通过push和pop方法管理对象生命周期。在MRC环境下需手动调用autorelease,而ARC环境由系统自动处理。源码分析表明,每个线程维护独立页栈,push操作插入POOL_BOUNDARY标记,pop反向释放标记间所有对象。AutoreleasePoolPage以4KB为单位存储对象,包含元数据及柔性数组,实现线程安全的延迟释放功能。该机制优化了内存管理效
2025-11-12 21:56:11
630
原创 OC母语的Developer对Swift常见问题的整理
本文涵盖了Swift编程中的7个核心知识点: 可选类型(Optional):介绍Optional的定义、必要性以及安全解包方法(可选绑定、强制解包等)。 Struct与Class:对比两者的值类型/引用类型特性,内存存储方式及适用场景。 闭包与循环引用:分析循环引用成因,通过weak/unowned捕获列表解决内存问题。 ARC机制:说明自动引用计数原理,比较Swift与Objective-C的ARC差异。 泛型编程:阐释泛型的类型抽象优势,展示其在数据结构和算法中的应用。 async/await:对比传统
2025-11-02 17:41:58
919
原创 iOS八股文之 组件化
组件化设计实践与方案对比 组件化是一种高内聚、低耦合的软件设计方法,通过分层拆解和标准化接口实现功能解耦。核心优势包括提升开发效率、支持并行开发、加速编译速度和促进代码复用。目前主流方案有四种: URL路由式:通过字符串URL进行通信,实现简单但类型不安全 协议接口式:基于Protocol定义接口,类型安全但维护成本较高 Target-Action反射式:利用运行时反射调用,彻底解耦但存在性能损耗 组合式方案:综合多种方式,适合复杂项目场景 关键实现技术还包括依赖管理、资源隔离和生命周期控制,需要平衡解耦程
2025-11-02 17:10:35
858
原创 iOS Runtime之 KVO
KVO(Key-Value Observing)是iOS中基于键路径的属性观察机制,通过运行时动态生成子类并重写setter方法实现属性变化的自动通知。使用步骤包括注册观察者、实现回调方法和及时移除观察者。开发中需注意注册/移除配对、防止重复操作、确保属性KVO兼容性、正确使用context参数以及线程安全等问题。Swift中需用@objc dynamic修饰属性才能支持KVO。KVO适用于数据驱动UI更新等场景,但要注意其潜在风险如野指针崩溃等。
2025-10-18 17:37:18
761
原创 iOS八股文之 网络
具体的网络库实现既可以依赖苹果原生NSURLSession,也可以使用优秀的三方库如AFNetworking,Alamofire等;
2025-10-18 12:01:39
1113
原创 iOS八股文之 多线程
iOS多线程核心技术解析: 核心方案:主要使用GCD(队列+任务)和NSOperationQueue(面向对象封装),前者适合简单并发,后者支持任务依赖、优先级等复杂场景。 关键机制: GCD通过串行/并行队列与同步/异步执行组合控制线程行为 NSOperationQueue提供任务管理(依赖、取消、优先级) 线程安全需用锁(@synchronized/NSLock)或信号量 典型场景: 异步处理耗时任务后主线程更新UI 信号量控制并发数防止线程爆炸 任务依赖实现有序执行链 常见陷阱: 子线程操作UI导致崩
2025-10-17 13:32:29
1038
原创 iOS八股文之 内存管理
iOS内存管理核心机制与常见问题 iOS内存管理基于引用计数机制,通过ARC自动管理对象生命周期。核心机制包括: 引用计数:通过isa指针和SideTable存储计数,强引用(__strong)增加计数,弱引用(__weak)不影响计数 ARC:编译器自动插入retain/release代码,开发者无需手动管理 自动释放池:延迟释放临时对象,RunLoop控制主线程的释放时机 常见内存问题: 循环引用:Block捕获self、代理强引用、NSTimer未释放等 内存泄漏:单例持有大对象、未移除通知监听、大对
2025-10-17 11:21:11
1141
原创 iOS八股文之 RunLoop
iOS RunLoop 是管理线程事件循环的核心机制,通过Mode隔离不同场景的事件源(Sources0/1、Timers、Observers),实现"按需唤醒、隔离事件"。主线程RunLoop自动运行,子线程需手动启动。RunLoop关键应用包括:解决NSTimer滑动失效(CommonModes)、子线程保活(添加Port事件源)、滑动时暂停非必要任务优化性能。理解RunLoop对多线程编程、性能优化和卡顿监控至关重要。
2025-10-16 11:55:44
1162
原创 iOS八股文之 Runtime
这个看苹果文档的描述即可:Objective-C 语言尽可能将诸多决策从编译时和链接时推迟到运行时。只要有可能,它都会以动态方式处理事务。这意味着该语言不仅需要编译器,还需要一个运行时系统来执行已编译的代码。运行时系统就像是Objective-C 语言的一种操作系统,正是它让这种语言能够正常运行。runtime 主要用 C 语言编写(如objc.h、runtime.h中的 API),核心逻辑(如objc_msgSend)用汇编编写,目的是提升性能(汇编能直接操作寄存器,减少函数调用开销)。
2025-10-15 21:08:34
1141
原创 Swift中Struct和Class的区别
StructClassValue typeReference typeCopied when passed or assignedPassed around via pointersCopy on writeAutomatically reference countedFunctional programmingObject-oriented programmingNo inheritanceInheritance (single)“Free” i
2024-11-11 10:35:23
342
原创 Xcdoe快速更新安装的小Tips
现在的Xcode下载大小是变小了,Xcode16 压缩包仅有2.74G,但与之配套的模拟器也需要下载,坑爹的iOS 18 Simulator Runtime 需要下载8.05G;通过Xcode内部下载容易失败且下载慢;─=≡Σ(((つ•̀ω•́)つ 齐活,可以正常开发了。从AppStore更新估计有些慢的话;回车即可自动安装模拟器;
2024-09-24 14:52:39
813
原创 Xcode编译报错 #error unsupported Swift architecture
Xcode15 引入某些三方库时,真机跑起来没问题;但模拟器build时报错卡在。,注释掉代码也不行;
2024-06-17 10:22:16
3480
1
原创 iOS 使用Hex色值设置颜色(可设置透明度使用4个字节色值赋值)
简单来说就是用十六机制来表示三原色,三原色不同强度组合出不同颜色;Hex色值是什么(含透明度)
2024-04-23 16:45:53
1135
原创 Hex色值是什么(含透明度)
Hex代码为三字节的十六进制数字(即要写六个字符),其中每一字节或每两个字符分别代表三原色即红、绿、蓝颜色的强度。其格式如下:XXXXXX红绿蓝一个字节的十六进制字节取值为 00~FF;那么对应颜色强度定义为最低的00到最高强度FF。比如:白色由最高强度的三原色混合而成,每种颜色强度拉满,那么其Hex色值就为 #FFFFFF;黑色则完全相反,每种颜色强度最低,其Hex色值就为 #000000。那么三原色对应的色值就可写成如下:红色:#FF0000绿色:#00FF00。
2024-04-23 15:02:36
6410
原创 iOS UIDatePicker和NSDateFormatter强制设为24小时制显示
UIDatePicker 和 NSDateFormatter默认会受到系统设置里的时间格式影响,在设置 --> 通用 --> 日期与时间 --> 24小时制(是个滑动开关)如果用户在这里关掉了24小时制,相应的UIDatePicker会显示三列,左侧显示上午、下午;右侧两排显示最多12小时。但我们自己的应用内大部分时间需要保持24小时制显示UI,或者解析数据,并需要不受系统设置影响;
2024-01-18 12:07:27
1544
原创 iOS 如何使用protocol Buffers
Protocol buffers 开源并托管在Github,详见https://github.com/google/protobuf/google提供了pb转oc的方法,但是没有提供swift的,apple这里做了swift的使用,详见https://github.com/apple/swift-protobuf切记一定要安装3.0以上的版本,才支持OC,而且功能更好用;
2024-01-18 12:05:42
1646
原创 iOS 实现毛玻璃效果的简单方式
iOS提供了UIBlurEffect来快速实现毛玻璃效果,并提供了几种Style可供选择。style可选择枚举如下,iOS13后更丰富了可选样式。
2024-01-16 19:25:17
3364
原创 iOS CoreBluetooth 蓝牙广播如何解析获取到内容(如:kCBAdvDataServiceData)
这里的key其实是一个CBUUID类型,其可以通过 [CBUUID UUIDWithString:@“xxxx”] 方式构造一个;取到实际的value(NSData)
2024-01-16 10:48:56
1392
原创 iOS UIViewContentMode 不同效果图文对比
图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等;图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等;如果宽高比相同,等比例缩放;如果宽高比不同,会变形塞入;
2024-01-15 11:44:40
1794
原创 iOS 位运算符浅析:与、或、异或、取反、左移、右移
iOS开发中可以使用C语言位运算符主要包括六种:与( & )、或( | )、异或( ^ )、取反( ~ )、左移( >> )和右移(
2024-01-08 10:38:05
1043
原创 git add -A 和 git add -u 和 git add . 的区别
也就是说对于现在我们大部分已应用的2.x版本,git add -A和 git add . 没有区别,如果想要针对不同的改动来add,可以已根据上表来使用不同的参数;
2024-01-03 11:57:26
775
原创 UIPickerView和UIDatePicker 如何去掉SelectionIndicator,即中间选中那一个框
可以另辟蹊径,在创建一个pickerView后,遍历其subviews,找到这个框框,然后设置其backgroundColor为透明,然后再自己创建一个view,放在pickerview下面即可(^-^)V。坑爹的苹果对滚轮控件的自定义限制的太多,除完全自定义写一个滚轮外,日常简单需求稍微改下这俩picker,大部分内容无法自定义;1、 如果只是简单实现一个滚轮,字体大小可以通过缩放来搞定,当然也可以通过改变私有属性的方式去变更字体和颜色,但风险大,慎用;注意这里是两层subview遍历;
2023-11-24 15:52:38
850
原创 iOS CGRect CGPoint NSRange等结构体的NSLog打印输出
iOS的UIKit里提供了UIGeometry.h内有各结构体转换成NSString的方法,可用于打印输出;
2023-10-08 15:19:27
825
原创 Xcode 15 Assertion failed【iOS常见报错收集】
Xcode 15 Assertion failed: (false && "compact unwind compressed function offset doesn't fit in 24 bits"), function operator(), file Layout.cpp, line xxxx
2023-09-25 10:51:39
2265
1
原创 iOS 蓝牙连接 connectionSupervisionTimeout 是720ms 还是 2~6s
Supervision Timeout 的大小影响能耗及连接健壮性,需根据应用场景灵活设置此值来达到平衡,coreBluetooth API并未提供方法来修改connect的参数设置,故一般让机硬件来修改此Connection Parameter。这里720ms是iPhone作为主设connect时设定的connectionParameter,但是蓝牙协议允许外设来根据实际情况协商。
2023-09-20 20:37:24
1000
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅