首页 > 系统相关 >Objective C数组的内存管理

Objective C数组的内存管理

时间:2023-06-22 11:32:19浏览次数:52  
标签:addObject 数组 retainCount release 内存 str Objective array user

在addObj后及时释放所添加的object

NSMutableArray *array = [NSMutableArray new]; 
NSString *str = [[NSString alloc] initWithFormat:@"a"]; 
[array addObject:str]; 
[str release]; 
[array release];

也就是说当你吧str放进array的时候,相当于创建了一个str的副本,而这个副本的生命周期也就交给了array来管理了,  你只要负责把原来的对象进行释放也就可以了。[array release]的时候会调用相应的方法对数组里面的元素进行释放。简单来说也就是谁污染谁治理了。

下面代码引用计数变化做了注释:

User *user = [[User alloc] init];     // user retainCount = 1
  
[nsarray addObject:user];             //retainCount = 2, 加到array里面的时候,array做了一次retain

  
[user release];                            //  user  retainCount = 1

  
// array自己dealloc的时候,会把每个元素release一次


O了,上面就平衡了

标签:addObject,数组,retainCount,release,内存,str,Objective,array,user
From: https://blog.51cto.com/u_15588078/6534491

相关文章

  • Objective C中NULL、Nil、nil、NSNull 的区别
    NULLValuesThesemacrosdefinenullvaluesforclassesandinstances.NULL可以用在C语言的各种指针上#define__DARWIN_NULL#define__DARWIN_NULLConstantsc特有的,例子:int*pointerToInt=NULL;char*pointerToChar=NULL;structTreeNode*roo......
  • Objective C 属性
    为每一个变量实现其访问器,繁琐,@property可以替我们减轻工作。 是否暴露读写接口readonly将只生成getter方法而不生成setter方法(getter方法没有get前缀)。readwrite默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数)。  线程安全atomic对于对象的......
  • 【剑指Offer】35、数组中的逆序对
    【剑指Offer】35、数组中的逆序对题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出P%1000000007。输入描述:题目保证输入的数组中没有的相同的数......
  • C语言中数组和指针
    (文章目录)前言本文将给大家带来C语言中非常重要的两个知识点,指针和数组。一、指针的概念指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,指针既然都用来存放地址了那就说明指针也是一个变量。二、指......
  • 102 数组转字符串;反转字符串
    publicclassStr3{publicstaticvoidmain(String[]args){//将数组转【字,符,串】//数组int[]arrNum={1,2,3,4,5};Stringss=getStr(arrNum);System.out.println(ss);}//获得一个拼接后的字符串publics......
  • 20230303 2.0. 数组和链表
    数组数组是最基本的构造类型,它是一组相同类型数据的有序集合。数组中的元素在内存中连续存放,用数组名和下标可以唯一地确定数组元素。链表链表是一种重要的基础数据结构,也是实现复杂数据结构的重要手段。它不按照线性的顺序存储数据,而是由若干个同一结构类型的“结点”依次......
  • 会导致内存泄漏的原因
    一、意外的全局变量由于使用了未声明的变量,以外的创建了一个全局变量,此变量一直留在内存中无法被回收二、被遗忘的计时器或者回调函数设置了setInterval定时器,忘记取消。若循环函数又对外部变量的引用,此变量会一直留在内存,无法回收三、脱离DOM的引用获取了一个DO......
  • 全网最新最全首届“陇剑杯”网络安全大赛完整WIRTEUP --- 内存分析(2题)
    题目描述网管小王制作了一个虚拟机文件,让您来分析后作答:  6.1虚拟机的密码是_____________。(密码中为flag{xxxx},含有空格,提交时不要去掉)wp:kali安装好Volatility和mimikatz插件执行 #查看镜像信息volatility-fTarget.vmemimageinfo#使用mimikatz跑密码volatility-f......
  • [Leetcode] 0724. 寻找数组的中心下标
    724.寻找数组的中心下标点击上方,跳转至leetcode题目描述给你一个整数数组 nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。......
  • iOS开发笔记 - Objective-C和JavaScript的混编
    最近看了一个对Github上面编程语言使用统计的排行榜,JavaScript真可以说是一枝独秀,很难想象20年前,这个语言只是浏览器中的装饰性语言,能做的事情也就是一点特效或者检查一下要提交给服务器的表单是否满足要求。今天的JavaScript已经是一个全栈语言,从客户端到服务器无所不在。很多编程......