-
【NSArray和NSDictionary的内存管理 Objective-C语言】
一、集合
1.什么是集合:
NSArray、NSDictionary,就叫做集合
只不过我们之前叫它们什么,是不是叫数组啊,后面我们一般情况下不叫它们数组,叫做集合,
NSArray叫集合,NSDictionary叫字典集合,
2.内存管理什么意思呢,
我们现在先把ARC关掉
再来一个Person类,
在main.m文件中,把这个Person类引进来
#import
#import
int main(){
//现在我要做一件事情,做一件什么事情呢,
//我创建1个Person对象
Person *p1 = [Person new];
//有对象的创建,我们说过,是不是马上跟1个release啊
//好了,我在最后面来一个,[p1 release];
//当然,你也可以把它放到哪儿去,是不是放到自动释放池里面去啊,好了,不管了,不放了啊,
//现在我来个NSArray
NSLog(@“%lu”,p1.retainCount);
NSArray *arr = @[p1];
NSLog(@“%lu”,p1.retainCount);
//是不是我还要来个arr release啊,不然是不是这个数组不能释放啊,
[arr release];
[p1 release];
return 0;
}
//好了,我们的目的在于什么地方,我是不是把这个p1存到数组里面去了,
//在MRC的模式下,将1个对象存储到集合当中,会不会影响对象的引用计数器
//其实,我们可以看一下啊,NSLog(@“%lu”,p1.retainCount),我把这句话写到前面去,写到把p1存储到集合当中之前,在写到后面去,写到把p1存储到集合当中之后,
输出:1
2
是不是会影响p1的引用计数器啊,因为arr它在用p1啊
因为这个集合在用啊,所以肯定会加1,对不对,
将对象存储到集合之中,
所以记住,将对象存储到集合当中,会为对象的引用计数器,加1
那这个数组销毁的时候呢,
我在[arr release];这句话后面,再打出来看看,NSLog(@“%lu”,p1.retainCount);
int main(){
Person *p1 = [Person new];
NSLog(@“%lu”,p1.retainCount);
NSArray *arr = @[p1];
NSLog(@“%lu”,p1.retainCount);
[arr release];
//这个时候,是不是数组销毁了啊,数组销毁的时候,它会怎么做呢
//会不会为这个,存储在数组里面的对象,release一下呢
NSLog(@“%lu”,p1.retainCount);
[p1 release];
return 0;
}
输出:1
2
1
数组一旦销毁,就会向存储在数组中的对象,发送1条release消息
当集合销毁的时候,就会向存储在集合中所有的对象发送1条release消息,
3.我来一个autoreleasepool
int main(){
@autoreleasepool{
//我创建1个数组
NSArray *arr = [NSArray arrayWithObjects:@“jack”,@“rose”,@“lili”,nil];
}
//我的问题是什么呢,这个arr数组,会不会加到这个自动释放池里面去,
//会,因为我们这个对象,是通过同名的类方法创建的,我们讲过,根据类规范,如果是通过同名的类方法创建的对象,那么它是不是已经被自动autorelease过了吧
//那我用下面这种方式创建对象,会不会自动加入到自动释放池里面去呢,
NSArray *arr2 = @[@“jack”,@“rose”,@“lili”];
//也会,用这种方式,创建的NSArray对象,也已经是被autorelease过了的,
return 0;
}
4.使用@[]或者@{}创建的集合,已经是被autorelease过了的,
直接调用同名的类方法,创建的对象 ,也是被autorelease过了的,
5.我们之前是在MRC模式下对不对,那如果现在我们在ARC模式下,我关心的是什么,
例如,我有一个Person对象,我把它存到NSArray数组里面,
int main(){
Person *p1 = [Person new];
NSArray *arr = @[p1];
//在ARC模式下,我们关心的是什么,关心的是这个数组的元素,是强类型,还是弱类型,
//是强类型的
6.在ARC的模式下,集合的元素,是1个强类型的指针
好了,以上就是NSArray和NSDictionary的内存管理 Objective-C语言
-
相关阅读:
探讨基于IEC61499 的分布式 ISA Batch 控制系统
MyBatis核心知识点介绍
Verilog 加法器设计
chatglm2微调—Lora
Postman(2): postman发送带参数的GET请求
【软件测试】男生vs女生,谁更加适合?没有你发现不了的bug......
《七月集训》(第一天)——数组
计数排序法
Prometheus存储容量估算和Prometheus联邦机制
Java爬虫利器:Jsoup详细介绍与用法
-
原文地址:https://blog.csdn.net/madoca/article/details/127950101