<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[RollingPin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/RollingPin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; RollingPin]]></copyright><item><title><![CDATA[ruby使用之rvm和rbenv对比]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/156914938</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/156914938</guid><author>RollingPin</author><pubDate>Sun, 25 Jan 2026 17:36:22 +0800</pubDate><description><![CDATA[RVM vs rbenv：Ruby版本管理工具对比 RVM是功能全面的重量级工具，内置gemset和环境隔离，适合新手开箱即用；rbenv是轻量级工具，遵循Unix设计原则，需插件扩展功能，适合追求干净环境的开发者。RVM安装简单但侵入性强，可能影响终端速度；rbenv配置稍复杂但更轻量稳定，特别适合Mac开发者。建议新手选RVM快速上手，资深开发者选rbenv+插件组合，尤其推荐Mac用户使用rbenv以获得更好的兼容性和性能体验。]]></description><category></category></item><item><title><![CDATA[pod install报错处理：Failed to connect to github.com port 443 after 75003 ms: Couldn‘t connect to server]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/156266754</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/156266754</guid><author>RollingPin</author><pubDate>Thu, 25 Dec 2025 12:13:35 +0800</pubDate><description><![CDATA[Git代理配置解决Pod安装超时问题 当使用pod install拉取GitHub库因网络问题超时时，需配置Git代理而非仅开启全局代理。步骤如下： 查找代理服务器IP和端口（通过系统设置→WiFi→代理查看） 编辑~/.gitconfig文件，添加配置： [http] proxy = http://服务器IP:端口 [https] proxy = http://服务器IP:端口 保存后重新执行pod install即可解决下载问题。 （注：需确保代理服务器信息正确，与浏览器可访问GitHub不同，Git需]]></description><category></category></item><item><title><![CDATA[sudo gem install cocoapods 报错处理1]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/156231269</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/156231269</guid><author>RollingPin</author><pubDate>Wed, 24 Dec 2025 13:26:45 +0800</pubDate><description><![CDATA[摘要：该问题是由于SSL证书验证失败导致无法安装cocoapods，错误显示证书链中存在自签名证书且根证书不受信任。解决方法是通过修改RubyGems配置文件(~/.gemrc)，添加ssl_verify_mode: 0来忽略SSL验证，并指定gem源为https://gems.ruby-china.com，然后重新执行安装命令即可。这种方案适用于因公司内网/代理导致证书验证失败的情况。]]></description><category></category></item><item><title><![CDATA[iOS探究使用Block方式实现一对多回调能力]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/155990412</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/155990412</guid><author>RollingPin</author><pubDate>Wed, 17 Dec 2025 14:18:11 +0800</pubDate><description><![CDATA[本文探讨了一种基于Block的回调实现方式，用于iOS开发中一对多的回调场景。通过NSMapTable弱引用存储对象和对应的Block，结合Runtime动态绑定实现自动清理机制。当数据变化时，遍历NSMapTable执行所有有效Block回调，同时利用关联对象监听对象释放，及时清理无效记录。相比通知、KVO等方式，该方法具有代码集中、上下文友好、语法简洁等优势，适用于数据中心等需要一对多回调的场景。]]></description><category></category></item><item><title><![CDATA[React Native与Flutter的对比]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/155773669</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/155773669</guid><author>RollingPin</author><pubDate>Wed, 10 Dec 2025 11:29:59 +0800</pubDate><description><![CDATA[摘要：本文对比了React Native(RN)与Flutter两大移动端跨平台框架的核心差异。RN采用JS桥接原生渲染，依赖原生组件，适合中轻度UI场景；Flutter通过Dart自绘引擎直接操作GPU，性能更优，尤其在动画和复杂UI方面。开发体验上，RN对前端开发者更友好，Flutter需学习Dart但提供更快的热重载。生态方面RN更成熟，Flutter跨端支持更全面。总体而言，RN适合快速迭代项目，Flutter则在高性能、跨端一致性要求高的场景更具优势。]]></description><category></category></item><item><title><![CDATA[APDU数据格式的使用]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/155771805</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/155771805</guid><author>RollingPin</author><pubDate>Wed, 10 Dec 2025 11:01:36 +0800</pubDate><description><![CDATA[APDU（应用协议数据单元）是智能卡通信中的基本数据单位，分为命令APDU（C-APDU）和响应APDU（R-APDU）。C-APDU包含CLA、INS、P1、P2等指令字段，R-APDU包含响应数据和状态字SW1-SW2。常见的状态字包括9000（成功）、6982（需要PIN验证）、6A86（参数错误）等，用于指示操作结果。APDU作为协议数据单元，在不同网络层次对应不同形式，如数据位、帧、包等。该协议定义了智能卡与终端间的标准通信格式和状态响应机制。]]></description><category></category></item><item><title><![CDATA[TLV格式数据解析]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/155769469</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/155769469</guid><author>RollingPin</author><pubDate>Wed, 10 Dec 2025 10:41:22 +0800</pubDate><description><![CDATA[TLV数据结构简介 TLV（Tag-Length-Value）是一种灵活的数据编码结构，由三个核心字段组成： Tag：标识数据类型，通常用1字节表示 Length：记录Value的字节长度，常用定长编码 Value：存储实际数据，可以是基础类型或嵌套的TLV结构 该结构支持无限嵌套，适用于协议封装和复杂数据表示。图示展示了TLV的基本组成形式，其设计兼具简洁性和扩展性，是通信协议中常用的数据封装方法。]]></description><category></category></item><item><title><![CDATA[iOS 动态库与静态库的区别]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/155529328</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/155529328</guid><author>RollingPin</author><pubDate>Wed, 03 Dec 2025 13:16:43 +0800</pubDate><description><![CDATA[静态库和动态库是两种不同的库链接方式。静态库在编译时嵌入目标程序，与程序融为一体，会增加安装包体积且无法共享；动态库则在运行时加载，独立文件可被多个程序共享，节省内存但需处理依赖和签名问题。静态库适用于轻量工具库、无频繁更新的场景，而动态库更适合核心功能库、需单独更新或多程序共享的情况。选择时应根据体积、更新频率和共享需求决定。]]></description><category></category></item><item><title><![CDATA[iOS 内存管理之 autoreleasePool]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/154753244</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/154753244</guid><author>RollingPin</author><pubDate>Wed, 12 Nov 2025 21:56:11 +0800</pubDate><description><![CDATA[摘要 自动释放池（autoreleasePool）是一种延迟释放对象的机制。其核心实现是AutoreleasePoolPage构成的双向链表结构，通过push和pop方法管理对象生命周期。在MRC环境下需手动调用autorelease，而ARC环境由系统自动处理。源码分析表明，每个线程维护独立页栈，push操作插入POOL_BOUNDARY标记，pop反向释放标记间所有对象。AutoreleasePoolPage以4KB为单位存储对象，包含元数据及柔性数组，实现线程安全的延迟释放功能。该机制优化了内存管理效]]></description><category></category></item><item><title><![CDATA[OC母语的Developer对Swift常见问题的整理]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/154293013</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/154293013</guid><author>RollingPin</author><pubDate>Sun, 02 Nov 2025 17:41:58 +0800</pubDate><description><![CDATA[本文涵盖了Swift编程中的7个核心知识点： 可选类型(Optional)：介绍Optional的定义、必要性以及安全解包方法（可选绑定、强制解包等）。 Struct与Class：对比两者的值类型/引用类型特性，内存存储方式及适用场景。 闭包与循环引用：分析循环引用成因，通过weak/unowned捕获列表解决内存问题。 ARC机制：说明自动引用计数原理，比较Swift与Objective-C的ARC差异。 泛型编程：阐释泛型的类型抽象优势，展示其在数据结构和算法中的应用。 async/await：对比传统]]></description><category></category></item><item><title><![CDATA[iOS八股文之 组件化]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/154292363</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/154292363</guid><author>RollingPin</author><pubDate>Sun, 02 Nov 2025 17:10:35 +0800</pubDate><description><![CDATA[组件化设计实践与方案对比 组件化是一种高内聚、低耦合的软件设计方法，通过分层拆解和标准化接口实现功能解耦。核心优势包括提升开发效率、支持并行开发、加速编译速度和促进代码复用。目前主流方案有四种： URL路由式：通过字符串URL进行通信，实现简单但类型不安全 协议接口式：基于Protocol定义接口，类型安全但维护成本较高 Target-Action反射式：利用运行时反射调用，彻底解耦但存在性能损耗 组合式方案：综合多种方式，适合复杂项目场景 关键实现技术还包括依赖管理、资源隔离和生命周期控制，需要平衡解耦程]]></description><category></category></item><item><title><![CDATA[iOS Runtime之 KVO]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153526848</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153526848</guid><author>RollingPin</author><pubDate>Sat, 18 Oct 2025 17:37:18 +0800</pubDate><description><![CDATA[KVO（Key-Value Observing）是iOS中基于键路径的属性观察机制，通过运行时动态生成子类并重写setter方法实现属性变化的自动通知。使用步骤包括注册观察者、实现回调方法和及时移除观察者。开发中需注意注册/移除配对、防止重复操作、确保属性KVO兼容性、正确使用context参数以及线程安全等问题。Swift中需用@objc dynamic修饰属性才能支持KVO。KVO适用于数据驱动UI更新等场景，但要注意其潜在风险如野指针崩溃等。]]></description><category></category></item><item><title><![CDATA[iOS八股文之 网络]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153519272</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153519272</guid><author>RollingPin</author><pubDate>Sat, 18 Oct 2025 12:01:39 +0800</pubDate><description><![CDATA[具体的网络库实现既可以依赖苹果原生NSURLSession，也可以使用优秀的三方库如AFNetworking，Alamofire等；]]></description><category></category></item><item><title><![CDATA[iOS八股文之 多线程]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153466413</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153466413</guid><author>RollingPin</author><pubDate>Fri, 17 Oct 2025 13:32:29 +0800</pubDate><description><![CDATA[iOS多线程核心技术解析： 核心方案：主要使用GCD（队列+任务）和NSOperationQueue（面向对象封装），前者适合简单并发，后者支持任务依赖、优先级等复杂场景。 关键机制： GCD通过串行/并行队列与同步/异步执行组合控制线程行为 NSOperationQueue提供任务管理（依赖、取消、优先级） 线程安全需用锁（@synchronized/NSLock）或信号量 典型场景： 异步处理耗时任务后主线程更新UI 信号量控制并发数防止线程爆炸 任务依赖实现有序执行链 常见陷阱： 子线程操作UI导致崩]]></description><category></category></item><item><title><![CDATA[iOS八股文之 内存管理]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153415177</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153415177</guid><author>RollingPin</author><pubDate>Fri, 17 Oct 2025 11:21:11 +0800</pubDate><description><![CDATA[iOS内存管理核心机制与常见问题 iOS内存管理基于引用计数机制，通过ARC自动管理对象生命周期。核心机制包括： 引用计数：通过isa指针和SideTable存储计数，强引用(__strong)增加计数，弱引用(__weak)不影响计数 ARC：编译器自动插入retain/release代码，开发者无需手动管理 自动释放池：延迟释放临时对象，RunLoop控制主线程的释放时机 常见内存问题： 循环引用：Block捕获self、代理强引用、NSTimer未释放等 内存泄漏：单例持有大对象、未移除通知监听、大对]]></description><category></category></item><item><title><![CDATA[iOS八股文之 RunLoop]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153396791</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153396791</guid><author>RollingPin</author><pubDate>Thu, 16 Oct 2025 11:55:44 +0800</pubDate><description><![CDATA[iOS RunLoop 是管理线程事件循环的核心机制，通过Mode隔离不同场景的事件源（Sources0/1、Timers、Observers），实现&quot;按需唤醒、隔离事件&quot;。主线程RunLoop自动运行，子线程需手动启动。RunLoop关键应用包括：解决NSTimer滑动失效（CommonModes）、子线程保活（添加Port事件源）、滑动时暂停非必要任务优化性能。理解RunLoop对多线程编程、性能优化和卡顿监控至关重要。]]></description><category></category></item><item><title><![CDATA[iOS八股文之 Runtime]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/153329821</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/153329821</guid><author>RollingPin</author><pubDate>Wed, 15 Oct 2025 21:08:34 +0800</pubDate><description><![CDATA[这个看苹果文档的描述即可：Objective-C 语言尽可能将诸多决策从编译时和链接时推迟到运行时。只要有可能，它都会以动态方式处理事务。这意味着该语言不仅需要编译器，还需要一个运行时系统来执行已编译的代码。运行时系统就像是Objective-C 语言的一种操作系统，正是它让这种语言能够正常运行。runtime 主要用 C 语言编写（如objc.h、runtime.h中的 API），核心逻辑（如objc_msgSend）用汇编编写，目的是提升性能（汇编能直接操作寄存器，减少函数调用开销）。]]></description><category></category></item><item><title><![CDATA[Swift中Struct和Class的区别]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/143626939</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/143626939</guid><author>RollingPin</author><pubDate>Mon, 11 Nov 2024 10:35:23 +0800</pubDate><description><![CDATA[Struct
Class




Value type
Reference type


Copied when passed or assigned
Passed around via pointers


Copy on write
Automatically reference counted


Functional programming
Object-oriented programming


No inheritance
Inheritance (single)


“Free” i]]></description><category></category></item><item><title><![CDATA[Xcdoe快速更新安装的小Tips]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/142489505</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/142489505</guid><author>RollingPin</author><pubDate>Tue, 24 Sep 2024 14:52:39 +0800</pubDate><description><![CDATA[现在的Xcode下载大小是变小了，Xcode16 压缩包仅有2.74G，但与之配套的模拟器也需要下载，坑爹的iOS 18 Simulator Runtime 需要下载8.05G；通过Xcode内部下载容易失败且下载慢；─=≡Σ(((つ•̀ω•́)つ 齐活，可以正常开发了。从AppStore更新估计有些慢的话；回车即可自动安装模拟器；]]></description><category></category></item><item><title><![CDATA[Xcode模拟器怎么触发摇一摇手机动作]]></title><link>https://blog.youkuaiyun.com/RollingPin/article/details/140120940</link><guid>https://blog.youkuaiyun.com/RollingPin/article/details/140120940</guid><author>RollingPin</author><pubDate>Tue, 02 Jul 2024 10:54:31 +0800</pubDate><description><![CDATA[详见内容]]></description><category></category></item></channel></rss>