关于iOS内存 指针一些整理

本文介绍了Objective-C中打印指针地址及对象地址的方法,并演示了如何查看ARC环境下对象的retain计数。通过具体示例,文章展示了如何利用NSLog打印指针的内存地址及其所指向的对象地址,以及如何在LLDB环境中查看特定地址的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于OC打印指针地址和arc下的retaincount

CFGetRetainCount((__bridge CFTypeRef)self  : 打印retainCount

打印指针的地址(不是指针指向对象的地址):NSLog(@"aStr指针内存地址:%x",&aStr);

打印指针所指向对象的地址使用这个 :NSLog(@"aStr指针所指向对象的地址:%p",aStr);


在LLDB中打印指针地址对应内容

po 0x6100002693c0


x/4 0x6100002693c0 




### iOS 开发中内存溢出导致应用闪退的解决方案 #### 识别内存问题的原因 内存溢出通常由多种原因引发,其中包括但不限于循环引用、图片加载不当以及WebView资源管理不善等问题。 在iOS开发过程中,常见的内存泄漏源包括`block`、`delegate`、`Timer`和通知机制中的强引用关系[^1]。这些情况会导致对象无法被释放,从而占据不必要的内存空间。此外,在处理大量图像数据时,如使用`SDWebImage`库加载过多图片也可能触发内存警告并最终导致应用程序崩溃[^2]。 对于HTML5页面展示组件(如UIWebView/WKWebView),其内部存在不同的缓存清理逻辑;然而,在极端情况下仍可能出现因内存不足而引起的异常行为,比如白屏现象或直接退出程序[^3][^4]。 #### 预防措施与优化建议 为了有效预防此类问题的发生,开发者可以采取如下几种方式: - **避免创建循环引用**:确保闭包内不会持有对外部实例(`self`) 的强引用。可以通过弱化捕获列表来实现这一点,即采用 `[weak self]` 或者 `[unowned self]` 来声明闭包参数。 ```swift sClosure = { [weak self] in guard let strongSelf = self else { return 0 } return strongSelf.a } ``` - **合理配置图片加载器**:针对大规模图片下载场景,应考虑设置合理的预取数量,并启用磁盘缓存功能以减少重复请求带来的额外负担。同时也要注意适时清除不再需要的数据项,防止过度消耗RAM资源。 - **监控WebView性能表现**:定期评估网页视图的表现状况,特别是长时间运行后的稳定性测试。必要时可尝试调整JavaScript执行环境大小限制或是强制刷新DOM结构以便及时释放无用节点所占的空间。 - **响应系统发出的记忆警告事件**:监听UIApplicationDidReceiveMemoryWarningNotification通知消息,一旦收到便立即着手整理工作集内的非必需部分,降低整体负载水平直至恢复正常运作状态为止。 #### 调试技巧 当遇到难以捉摸的应用终止情形时,借助Xcode内置工具链能够帮助快速定位根本所在: - 使用Instruments中的Allocations/Leaks模板追踪动态分配的对象生命周期轨迹; - 启动Zombie Objects检测模式捕捉已销毁但仍试图访问的指针错误; - 查看Crash Log文件获取最后一次失败前的关键线索提示。 通过上述手段相结合的方式,往往能更高效地找出潜在隐患点进而加以修复完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值