自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 iOS 内存管理之 autoreleasePool

摘要 自动释放池(autoreleasePool)是一种延迟释放对象的机制。其核心实现是AutoreleasePoolPage构成的双向链表结构,通过push和pop方法管理对象生命周期。在MRC环境下需手动调用autorelease,而ARC环境由系统自动处理。源码分析表明,每个线程维护独立页栈,push操作插入POOL_BOUNDARY标记,pop反向释放标记间所有对象。AutoreleasePoolPage以4KB为单位存储对象,包含元数据及柔性数组,实现线程安全的延迟释放功能。该机制优化了内存管理效

2025-11-12 21:56:11 598

原创 OC母语的Developer对Swift常见问题的整理

本文涵盖了Swift编程中的7个核心知识点: 可选类型(Optional):介绍Optional的定义、必要性以及安全解包方法(可选绑定、强制解包等)。 Struct与Class:对比两者的值类型/引用类型特性,内存存储方式及适用场景。 闭包与循环引用:分析循环引用成因,通过weak/unowned捕获列表解决内存问题。 ARC机制:说明自动引用计数原理,比较Swift与Objective-C的ARC差异。 泛型编程:阐释泛型的类型抽象优势,展示其在数据结构和算法中的应用。 async/await:对比传统

2025-11-02 17:41:58 900

原创 iOS八股文之 组件化

组件化设计实践与方案对比 组件化是一种高内聚、低耦合的软件设计方法,通过分层拆解和标准化接口实现功能解耦。核心优势包括提升开发效率、支持并行开发、加速编译速度和促进代码复用。目前主流方案有四种: URL路由式:通过字符串URL进行通信,实现简单但类型不安全 协议接口式:基于Protocol定义接口,类型安全但维护成本较高 Target-Action反射式:利用运行时反射调用,彻底解耦但存在性能损耗 组合式方案:综合多种方式,适合复杂项目场景 关键实现技术还包括依赖管理、资源隔离和生命周期控制,需要平衡解耦程

2025-11-02 17:10:35 822

原创 iOS Runtime之 KVO

KVO(Key-Value Observing)是iOS中基于键路径的属性观察机制,通过运行时动态生成子类并重写setter方法实现属性变化的自动通知。使用步骤包括注册观察者、实现回调方法和及时移除观察者。开发中需注意注册/移除配对、防止重复操作、确保属性KVO兼容性、正确使用context参数以及线程安全等问题。Swift中需用@objc dynamic修饰属性才能支持KVO。KVO适用于数据驱动UI更新等场景,但要注意其潜在风险如野指针崩溃等。

2025-10-18 17:37:18 720

原创 iOS八股文之 网络

具体的网络库实现既可以依赖苹果原生NSURLSession,也可以使用优秀的三方库如AFNetworking,Alamofire等;

2025-10-18 12:01:39 1084

原创 iOS八股文之 多线程

iOS多线程核心技术解析: 核心方案:主要使用GCD(队列+任务)和NSOperationQueue(面向对象封装),前者适合简单并发,后者支持任务依赖、优先级等复杂场景。 关键机制: GCD通过串行/并行队列与同步/异步执行组合控制线程行为 NSOperationQueue提供任务管理(依赖、取消、优先级) 线程安全需用锁(@synchronized/NSLock)或信号量 典型场景: 异步处理耗时任务后主线程更新UI 信号量控制并发数防止线程爆炸 任务依赖实现有序执行链 常见陷阱: 子线程操作UI导致崩

2025-10-17 13:32:29 998

原创 iOS八股文之 内存管理

iOS内存管理核心机制与常见问题 iOS内存管理基于引用计数机制,通过ARC自动管理对象生命周期。核心机制包括: 引用计数:通过isa指针和SideTable存储计数,强引用(__strong)增加计数,弱引用(__weak)不影响计数 ARC:编译器自动插入retain/release代码,开发者无需手动管理 自动释放池:延迟释放临时对象,RunLoop控制主线程的释放时机 常见内存问题: 循环引用:Block捕获self、代理强引用、NSTimer未释放等 内存泄漏:单例持有大对象、未移除通知监听、大对

2025-10-17 11:21:11 1076

原创 iOS八股文之 RunLoop

iOS RunLoop 是管理线程事件循环的核心机制,通过Mode隔离不同场景的事件源(Sources0/1、Timers、Observers),实现"按需唤醒、隔离事件"。主线程RunLoop自动运行,子线程需手动启动。RunLoop关键应用包括:解决NSTimer滑动失效(CommonModes)、子线程保活(添加Port事件源)、滑动时暂停非必要任务优化性能。理解RunLoop对多线程编程、性能优化和卡顿监控至关重要。

2025-10-16 11:55:44 1103

原创 iOS八股文之 Runtime

这个看苹果文档的描述即可:Objective-C 语言尽可能将诸多决策从编译时和链接时推迟到运行时。只要有可能,它都会以动态方式处理事务。这意味着该语言不仅需要编译器,还需要一个运行时系统来执行已编译的代码。运行时系统就像是Objective-C 语言的一种操作系统,正是它让这种语言能够正常运行。runtime 主要用 C 语言编写(如objc.h、runtime.h中的 API),核心逻辑(如objc_msgSend)用汇编编写,目的是提升性能(汇编能直接操作寄存器,减少函数调用开销)。

2025-10-15 21:08:34 1110

原创 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 308

原创 Xcdoe快速更新安装的小Tips

现在的Xcode下载大小是变小了,Xcode16 压缩包仅有2.74G,但与之配套的模拟器也需要下载,坑爹的iOS 18 Simulator Runtime 需要下载8.05G;通过Xcode内部下载容易失败且下载慢;─=≡Σ(((つ•̀ω•́)つ 齐活,可以正常开发了。从AppStore更新估计有些慢的话;回车即可自动安装模拟器;

2024-09-24 14:52:39 785

原创 Xcode模拟器怎么触发摇一摇手机动作

详见内容

2024-07-02 10:54:31 780

原创 iOS API方法弃用警告说明及添加

可使用 **DEPRECATED_MSG_ATTRIBUTE(" ")** 来添加警告

2024-06-20 17:06:03 1086

原创 Xcode编译报错 #error unsupported Swift architecture

Xcode15 引入某些三方库时,真机跑起来没问题;但模拟器build时报错卡在。,注释掉代码也不行;

2024-06-17 10:22:16 3380 1

原创 iOS 使用Hex色值设置颜色(可设置透明度使用4个字节色值赋值)

简单来说就是用十六机制来表示三原色,三原色不同强度组合出不同颜色;Hex色值是什么(含透明度)

2024-04-23 16:45:53 1089

原创 Hex色值是什么(含透明度)

Hex代码为三字节的十六进制数字(即要写六个字符),其中每一字节或每两个字符分别代表三原色即红、绿、蓝颜色的强度。其格式如下:XXXXXX红绿蓝一个字节的十六进制字节取值为 00~FF;那么对应颜色强度定义为最低的00到最高强度FF。比如:白色由最高强度的三原色混合而成,每种颜色强度拉满,那么其Hex色值就为 #FFFFFF;黑色则完全相反,每种颜色强度最低,其Hex色值就为 #000000。那么三原色对应的色值就可写成如下:红色:#FF0000绿色:#00FF00。

2024-04-23 15:02:36 6196

原创 iOS 关于UIApplicationState的代表的不同时机

可通过如下获取到三种状态。

2024-01-19 14:18:08 1362

原创 iOS UIDatePicker和NSDateFormatter强制设为24小时制显示

UIDatePicker 和 NSDateFormatter默认会受到系统设置里的时间格式影响,在设置 --> 通用 --> 日期与时间 --> 24小时制(是个滑动开关)如果用户在这里关掉了24小时制,相应的UIDatePicker会显示三列,左侧显示上午、下午;右侧两排显示最多12小时。但我们自己的应用内大部分时间需要保持24小时制显示UI,或者解析数据,并需要不受系统设置影响;

2024-01-18 12:07:27 1489

原创 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 1610

原创 iOS 实现毛玻璃效果的简单方式

iOS提供了UIBlurEffect来快速实现毛玻璃效果,并提供了几种Style可供选择。style可选择枚举如下,iOS13后更丰富了可选样式。

2024-01-16 19:25:17 3191

原创 iOS CoreBluetooth 蓝牙广播如何解析获取到内容(如:kCBAdvDataServiceData)

这里的key其实是一个CBUUID类型,其可以通过 [CBUUID UUIDWithString:@“xxxx”] 方式构造一个;取到实际的value(NSData)

2024-01-16 10:48:56 1337

原创 iOS UIViewContentMode 不同效果图文对比

图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等;图片的宽度或者高度(至少一个)恰好与视图的宽度或者高度相等;如果宽高比相同,等比例缩放;如果宽高比不同,会变形塞入;

2024-01-15 11:44:40 1735

原创 iOS 字符串中的字母大小写转换、首字母大写转换

一般的英语转换用下面这仨就行:

2024-01-15 10:13:30 977

原创 iOS 按钮添加点击震动

iOS10后系统提供了一套API来简单实现震动:init时传入一个style定义好的枚举就可以实现不同的震动

2024-01-10 19:49:30 1632

原创 iOS 取整函数(四舍五入取整,向上向下取整,取最近整数)

取整用的函数主要在usr/include > math.h内。

2024-01-10 11:48:12 2614

原创 iOS 位移枚举NS_OPTIONS(如何实现多个枚举值的同时传入判断)

RPTestTypeValue0 = 1

2024-01-08 15:48:42 1182

原创 iOS 位运算符浅析:与、或、异或、取反、左移、右移

iOS开发中可以使用C语言位运算符主要包括六种:与( & )、或( | )、异或( ^ )、取反( ~ )、左移( >> )和右移(

2024-01-08 10:38:05 1008

原创 git add -A 和 git add -u 和 git add . 的区别

也就是说对于现在我们大部分已应用的2.x版本,git add -A和 git add . 没有区别,如果想要针对不同的改动来add,可以已根据上表来使用不同的参数;

2024-01-03 11:57:26 743

原创 UIPickerView和UIDatePicker 如何去掉SelectionIndicator,即中间选中那一个框

可以另辟蹊径,在创建一个pickerView后,遍历其subviews,找到这个框框,然后设置其backgroundColor为透明,然后再自己创建一个view,放在pickerview下面即可(^-^)V。坑爹的苹果对滚轮控件的自定义限制的太多,除完全自定义写一个滚轮外,日常简单需求稍微改下这俩picker,大部分内容无法自定义;1、 如果只是简单实现一个滚轮,字体大小可以通过缩放来搞定,当然也可以通过改变私有属性的方式去变更字体和颜色,但风险大,慎用;注意这里是两层subview遍历;

2023-11-24 15:52:38 802

原创 iPhone 如何强制重启

依照此方法强制重启手机

2023-10-11 19:15:28 4798

原创 iOS CGRect CGPoint NSRange等结构体的NSLog打印输出

iOS的UIKit里提供了UIGeometry.h内有各结构体转换成NSString的方法,可用于打印输出;

2023-10-08 15:19:27 791

原创 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 2246 1

原创 iOS 蓝牙连接 connectionSupervisionTimeout 是720ms 还是 2~6s

Supervision Timeout 的大小影响能耗及连接健壮性,需根据应用场景灵活设置此值来达到平衡,coreBluetooth API并未提供方法来修改connect的参数设置,故一般让机硬件来修改此Connection Parameter。这里720ms是iPhone作为主设connect时设定的connectionParameter,但是蓝牙协议允许外设来根据实际情况协商。

2023-09-20 20:37:24 976 1

原创 coreBluetooth报错: Error Domain=CBErrorDomain Code=6 \“The connection has timed out unexpectedly.\“

断开蓝牙连接后,回调参数error为:Error Domain=CBErrorDomain Code=6 “The connection has timed out unexpectedly.” UserInfo={NSLocalizedDescription=The connection has timed out unexpectedly.}

2023-09-20 17:33:21 1288

原创 iOS蓝牙 Connection Parameters 关键参数说明

允许从设备在没有数据要发的情况下,跳过一定数目的连接事件,在这些连接事件中不必回复主设备的包个数;事件间隔,为1.25ms的倍数。可以简单理解为,是两个连接着的蓝牙设备发送“心跳包”的时间间隔;超时时间,即如果BLE在这个时间内没有发生通信的话,就会自动断开,为10ms的倍数;范围是10 ~ 3200, 即 100ms ~ 32s;范围是 6 ~ 3200,即 7.5ms ~ 4s;范围是 0 ~ 499;

2023-09-20 17:13:37 1970 5

原创 Null passed to a callee that requires a non-null argument 【iOS常见报错收集】

此处某参数未设置 _Nullable,但是赋值了nil,xcode自动提示防止nil导致异常;将此处有可能传入nil的参数设置。

2023-02-20 09:16:56 1118

原创 iOS 组件中设置文件支持MRC

使用cocopods 加载此组件时,在 Pods 下的 Build Phases 中的 Compile Sources目录中 找到想要设置的文件,把 Compiler Flags 填写为 -fno-objc-arc。然后再正常使用的别的spec或subspec中依赖这个mrc-support 子组件就可了。

2022-11-10 10:32:34 1207

原创 Xcode 模拟器如何录屏

Xcode 模拟器如何录屏

2022-11-09 10:51:06 2644

原创 Mac 连接显示器,外接显示器不出影像

### 1. 现象 - 转换头,连接线已正确连接; - 显示器电源等也亮,且是已有视频信号的状态; - 查看设置--显示器,里面也显示识别出已连接外接显示器### 2. 解决办法显示器支持的 **最高刷新率** 与 **系统设置的刷新率** 不一致的...

2022-08-12 09:14:04 12873

原创 iOS Xcode 打开支持HTTP请求

修改应用程序的Info.plist文件配置,添加字段来打开支持http请求权限```xmlNSAppTransportSecurity NSAllowsArbitraryLoads ```

2022-07-22 18:03:54 2647

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除