OC中内存管理问题之引用计数

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程 本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。 阅读详情

定义一个Person类

其实引用计数这个问题大家可以理解为租房子的问题, 如果有retain alloc 代表这个人租了这间大房子, 拿到了一把钥匙, 引用计数代表房子一共有的钥匙的数量, release代表退房归还钥匙

        Person * p = [[Person alloc] init];//房东盖好了一间房子, 现在是房东一个人

        //alloc 开辟空间,引用计数由0变为1

        //retainCount,用于查看对象的引用计数

        NSLog(@"%lu", [p retainCount]);

       Person * p1 = [p retain];// retain一次, 代表又来一个人租房

       NSLog(@"p1 = %lu", [p1 retainCount]);//引用计数1-2

        NSLog(@"%lu", [p retainCount]);//引用计数1-2

Person * p2 = p1;//没有retain 也没有alloc 引用计数不变. 就相当于p1带他的朋友来住,朋友没有钥匙的

//release 减少引用计数(归还钥匙)

        [p release];//引用计数2-1

[p release];//引用计数1-0(但是如果我们去输出的话, 可能是会显示崩溃, 或者是1, 原因如下:)

NSLog(@"%lu", [p retainCount]);// 首先这样写肯定是不对的 , 最后一次release,系统已经回收掉这块内存,空间已经还给系统,空间已经不归你管理,如果此时在访问,就访问了一块没有所有权的空间,所以下面的操作可能会出现野指针问题

我们还以上面的租房子问题为例, 现在这间房子最后一个人已经走了, 已经没有人住了, 按说钥匙已经全部交上去了, 但是我们现在的操作就像是又拿着他的钥匙去开那个门, 这是非常不安全的.那为什么有时候会崩溃而有时候可以打印出1呢, 这是因为如果这块内存别人还没有使用, 就像是房子还没有租出去, 你再回去拿钥匙开门还是安全的, 但是如果这间房子又已经租出去, 即已经有别的数据在使用这块内存, 那你再回去开门, 那你的处境是相当的不安全有木有???

[p release];//野指针问题 +过渡释放,这个也很好理解, 大家可以理解成有房客拿一把钥匙, 不但要开门, 还要拿着这个钥匙再去归还一次, 要房东再次退房子押金, 违法了, 直接崩~


内存问题其实除了上面提到的野指针和过度释放, 还有一个, 那就是内存泄露, 内存泄露我们可以理解为, 一为租客租房子最后钥匙没有归还, 这样房东也没有办法打开这间房子, 这间房子就没有办法再租出去, 导致内存浪费, 当然, 房东在有别的房子出租的时候, 对于他来讲并没有太大的影响, 但是一旦这样的房客有好多,房子不够租, 房东挣钱会越来越慢, 最终可能导致做不下去~

本文只是个人对内存引用计数的一些理解 有什么不对的地方, 大家多多指出~

OpenCV视频防抖算法实现与优化指南 本文详细解析了如何使用OpenCV实现视频防抖算法。通过特征点检测与光流跟踪估算帧间运动,利用滑动平均平滑运动轨迹,并应用仿射变换重塑视频帧。文章提供了完整的代码实现、参数调优指南及黑边处理等优化技巧,帮助开发者高效处理手持拍摄等场景下的视频抖动问题。 阅读详情

相关推荐

从OFED到rdma-core:手把手带你搞定Linux下RDMA开发环境的选型与搭建

本文详细介绍了在Linux系统下搭建RDMA开发环境的完整流程,涵盖OFED与rdma-core的选型对比及分步安装指南。针对高性能计算和分布式存储需求,解析RDMA技术栈的核心组件,提供环境验证与性能测试方法,帮助开发者快速构建稳定高效的开发环境。特别适合需要优化网络性能的工程师参考。

weixin_26905487的博客 225

关于OC中引用计数问题

1:被release之后的引用计数  // class1 仅仅是一个自定义类 没有任何方法和属性  class1 * c1 = [[class1 alloc]init];  NSLog(@"c1的retainCount = %lu",(unsigned long)[c1 retainCount]);  //输出结果为 1  当一个对象的引用计数为1的时候,再被release

zhanglinxu的专栏 1015

【Cadence】Virtuoso@LayoutXL 差分电路版图同步修改

对于差分电路,器件和部分走线通常是对称的,只需要画一半,另一半通过镜像操作完成。因此,需要对差分电路进行同步的修改,保证电路的差分对称性和正确的连接关系。然而,通常版图会经过多次修改,修改的部分可能在镜像的时候被遗漏。左边画了金属块,右边也出现了同步出现了金属块。进入group会有同步复制的提示。

乾巽的博客 3050

iOS 自动引用计数和内存泄露

Swift的自动引用计数->解决内存泄露 在swift中的变量一般分为三种: 1、          strong 强引用  默认 2、          weak  弱引用  定义时前面加 weak关键字(值可选情况下使用) 3、          unowned 无主引用  定义时前面加 unowned关键字(值不变情况下使用) 销毁情况          强引用不会自

小桥流水哗啦啦,iOS Coder 哒哒哒 3068

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码

本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。

m0_72768523的博客 5357

iOS_assign,retain,weak,strong的引用计数区别(附代码示例)

关于这四者的关系,不需要再解释太多。简单的一句话:assign和retain是旧版本的语法,新版本的已对应更改为weak和strong。 即: assign相当于weak, retain相当于strong。 用strong声明的属性赋值给了weak声明的属性,当strong释放的时候,weak会

云笔记 2879

手把手教你用TBtools+MCScanX完成玉米基因家族共线性分析(附完整代码)

本文提供了一套完整的玉米基因家族共线性分析实战流程,详细讲解了如何从数据准备、格式处理开始,利用DIAMOND进行快速比对,再结合MCScanX进行核心共线性区块鉴定,最后通过TBtools实现从全基因组圈图到特定基因家族微共线性图的可视化。教程包含可直接运行的代码与常见问题解决方案,帮助研究者高效完成从命令行计算到图形化展示的全过程。

tech5的博客 591

OC内存管理之—引用计数

引用计数器 1 在Xcode4.2以及以后的版本中由于引入了ARC(Automatic Reference Counting)自动引用计数机制,程序编译时Xcode可以自动给你的代码添加内存释放代码,如果编写手动释放代码Xcode会报错,如果使用是Xcode4.2以后的版本,必须手动关闭ARC。 ObjC中的内存管理机制跟C语言中指针的内容是同样重要的,要开发一个程序并不难,但是优秀的程序则...

iteye_18817的博客 303

UniApp 覆盖安装后首次进入 APP pages.json 不生效的解决方案

通过以上步骤,解决了缓存问题导致的首次加载异常。此方案的关键在于强制更新文件名,从根本上避免旧缓存的干扰。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 683

Headless Browser 反检测:如何在自动化测试和爬虫中模拟真实用户环境和指纹,以规避检测?

这是最基本的操作,你需要将 Headless Browser 的 User-Agent 修改成一个真实的 User-Agent。我是你们的老朋友,代码界的段子手,今天咱们来聊聊一个让爬虫工程师和自动化测试工程师头疼,但又不得不面对的问题:Headless Browser 的反检测。Headless Browser 的反检测是一个持续对抗的过程,网站的反爬虫机制会不断升级,你需要不断地学习新的反检测技巧。以上只是一些基本的反检测手段,如果你的目标网站的反爬虫机制比较高级,那么你需要使用更高级的技巧。

weixin_41455464的博客 1657

【Effective_Objective-C_5内存管理】

新年从iOS内存管理开始学习。OC是一门面向对象的语言,而面向对象语言里内存管理是一个重要的概念,想用一门语言写出内存使用效率高的代码就得掌握其中的细节,在OC引入ARC模式之后内存管理的事情几乎都是由编译器来决定的,这使我们学习内存管理变得简单许多内存管理虽然大部分内容讲的是关于MRC情况下的手动管理方法和原理,但其中不乏很多值得学习的思路,在MRC如何更好的管理内存,在ARC下什么该用什么不该用,都是值得学习的地方,内存管理很重要!

weixin_61639290的博客 1931

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

第五章 内存管理

这样的话,

m0_73974056的博客 1131

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

内存管理

如果一个APP使用的内存超过20M系统会发送Memory Warning消息 ,之后会回收一些不使用的内存空间 OC内存管理范围 管理任何继承NSObject的对象,对其他的基本数据类型无效。 BSS段 数据区 代码段  程序启动时候加载 栈区 到代码区是从高地址到低地址 堆区是从低到高 对象所有权 任何对象都可能有一个

Shave_Kevin的专栏 691

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

探讨OC的内存管理 以及防止循环引用retain cycle 代理为什么用weak block为什么用copy

首先声明OC的内存管理机制:引用计数。当一个对象的引用计数为0时,这个对象就会被释放。铭记以上两点,我们开始来探讨。 换句话说,如果一个对象,没有强指针指向,就会被释放。举个很形象的例子,假如每一个对象都是一只狗,每一个强指针都是狗链子,狗链子的数量就是引用计数。那么情况就会变成这样:当一个狗没有被狗链子拴着的时候,它就跑了。哈哈~ 那么什么情况下又会造成循环引用呢?顾名思义,就是两个对象相互强引用

Se7en丶潇洒哥 的博客 2328

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【iOS】MRC与ARC

摘要:Objective-C内存管理机制 Objective-C提供了MRC(手动引用计数)和ARC(自动引用计数)两种内存管理机制。MRC需要开发者手动管理对象生命周期,通过retain/release控制引用计数,易引发内存泄漏和悬挂指针问题。ARC则通过编译器自动插入内存管理代码,简化了开发流程。

2301_80467753的博客 1258

OC内存管理

OC内存管理 分类:OC基础2014-10-07 00:441872人阅读评论(0)收藏举报 OC内存管理 OC面向对象之内存 OC内 OC内存管理 一、基本原理 (一)为什么要进行内存管理。 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回...

前端码农 81

【OC语言】第六篇·内存管理

一、内存管理    1. 为什么要进行内存管理      移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多是,系统就会发出内存警告,每个app可以用的内存是被限制的,如果内存超过20M,系统就会对该APP发出Memeory Warning消息。收到此消息需要回

WackoSix的博客 526

STM32 FreeRTOS多任务实战:DHT11+OLED+ESP8266云端上传

在嵌入式开发中,RTOS多任务调度是提升系统实时性与可靠性的核心技术。FreeRTOS作为轻量级实时操作系统,通过抢占式调度、任务间通信和优先级管理,让STM32等MCU能够高效处理多个并发任务。其原理基于任务独立栈空间与调度器统一分配CPU时间,技术价值在于解耦复杂逻辑、降低耦合度,广泛应用于物联网终端、工业控制等场景。本文以STM32F103C8T6为平台,结合DHT11温湿度采集、SSD1306 OLED显示与ESP8266云端通信,详细阐述FreeRTOS任务划分、队列与信号量通信机制,并分享栈溢出

weixin_34095889的博客 382

浅析内存管理

Objective-C使用一种(Retain Count)引用计数的机制来管理内存,在OC中,每个对象都持有自己的retain count,引用计数可以理解为就是一个计数器,当对象alloc创建的时候,会自动设置为1,当给对象发送retain消息的时候,引用计数会加1,当给对象发送release消息的时候,引用计数会减1,当引用计数为0的时候,对象会释放所占用的内存,这就是内存管理的机制,听起来比

不正经开发 768

iOS内存管理相关知识笔记

iOS内存管理相关知识笔记 使用CADisplayLink、NSTimer有什么注意点? CADisplayLink、NSTimer会对target产生强引用,如果target又对它们产生强引用,那么就会引发循环引用 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(task) userInfo:n...

WJ的博客 407

APP内存管理

文章目录1、iOS程序的内存布局2、Tagged Pointer 标记指针问答拓展3、定时器3.1、NSTimer、CADisplayLink的使用注意点3.2、GCD定时器封装4、OC对象的内存管理4.1、引用计数的存储4.2、dealloc4.3、自动释放池4.3.1、autorelease 底层结构4.3.2、AutoreleasePoolPage1、链表关系2、实现原理3、触发逻辑5、问答拓展 1、iOS程序的内存布局 1、代码段:编译之后的代码 2、数据段 2.1、字符串常量:比如NSStr

chenzimin_blog 966

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数

自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。用苹果官方说明的话说:在OC中采用ARC机制,让编译器来进行内存管理,在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再键入retain或者release代码。也就是说,只要满足以下条件,就无需手动输入retain和release代码了:使用Xcode4.2或以上版本使用LLVM编译器3.0或以上版本编译器选项中设置ARC为有效。

2301_80095702的博客 1521

OC的内存管理引用计数机制

我们知道,程序在堆区的内存管理需要程序员手动来分配及回收,什么时候分配,什么时候回收,这就是内存管理了。 苹果的OC语言,对于内存管理是用一种叫做引用技术机制的管理方式,说简单点就是给这块内存空间挂一个写着整数的牌子,当牌子上的数字不为0时,这块内存地址就不回收,程序员可以用alloc,retain,release,autorelease,对这个牌子上的数字进行增减。在IOS5之前,这件事都是由

laomaoshiba的专栏 1238

OC内存管理,MRC,手动引用计数,ARC,自动引用计数

alloc 开辟内存空间, 并且将对象的引用计数由0变1 retain 将对象的引用计数加1 release 将对象的引用计数立即减1 autorelease 会将声明为autorelease的对象放入到离他最近的自动释放池中, 当自动释放池销毁时, 会向池中的每一个对象发送一个release消息 内存管理基本原则: 若你对一个对象进行了alloc retain copy 之后, 你就拥有了该对象

vaercly的专栏 2158
上一篇: IOS开发常用工具及视频网站
下一篇: UI 问题总结
WMMBK
博客等级 码龄12年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值