OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
来源:互联网 发布:sem搜索引擎优化案例 编辑:程序博客网 时间:2024/04/28 15:16
一:集合的内存管理
集合类中的内存管理都是一个模式的,以下面就以数组为例;
①:首先调成手动内存管理模式
②:创建一个person对象
本节小节知识点:
1:当我们把一个对象存入到数组的时候,数组会对这个对象进行一次retain操作
2:当我们把一个对象移除到数组中的时候,数组会对这个对象会进行一次release操作
3:当对象被销毁的时候,会对内部所有的对象进行一次release操作
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { //集合类都是一样的,以数组为例 @autoreleasepool { Person *person = [[Person alloc]init]; NSMutableArray * muArray = [[NSMutableArray alloc]init]; //当我们把一个对象存入到数组的时候,数组会对这个对象进行一次retain操作 [muArray addObject:person]; /* //当我们把一个对象移除到数组中的时候,数组会对这个对象会进行一次release操作 [muArray removeObject:person]; //removeAllObjects会对数组中所有对象,进行一次release操作(跟autorelease有点像); [muArray removeAllObjects]; */ //当对象被销毁的时候,会对内部所有的对象进行一次release操作; NSLog(@" retaincount %zi",person.retainCount);//2 [muArray release]; NSLog(@" retaincount %zi",person.retainCount);//1 [person release]; NSLog(@" retaincount %zi",person.retainCount); } return 0;}
二:ARC机制下的内存管理
ARC机制下是否担心内存泄露呢?
本节知识点:
1:当一个对象被存入集合的时候,默认会保存它的强指针
2:当一个对象从集合中删除的时候,会释放掉这个强指针
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [[Person alloc]init]; NSMutableArray *muArray = [[NSMutableArray alloc]init]; //当一个对象被存入集合的时候,默认会保存它的强指针,就是说以本例为例,现在数组中添加一个person对象,那么你把person设置成nil,person仍然不会被销毁 [muArray addObject:person]; //当一个对象从集合中删除的时候,会释放掉这个强指针 //[muArray removeObject:person]; //[muArray removeAllObjects]; muArray = nil;//当运行到这一行,系统会判断还有强指针指向它吗?一看没有,马上把这个对象给释放了,注意是把不保持里面对象是强指针了,那么你再把对象设为nil,对象就会被销毁 // NSLog(@"retaincount %zi",person.retainCount); person = nil; NSLog(@"aaaaaaaaaaaaaaa"); } return 0;}
三:集合之间的相互转换
1:不可变集合转变成可变集合
2:NSArray转换成NSSet
3: 字符串串转换成数组(重点,相当于java中的split);
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //1:NSArray 转换成NSMutableArray NSArray *array = @[@"one",@"two",@"three"]; NSMutableArray *muArray = [NSMutableArray arrayWithArray:array]; NSLog(@"muArray %@",muArray); //2: NSDictionary 转换成NSMutableDictionary NSDictionary *dict = @{ @"1":@"one", @"2":@"two", @"3":@"three" }; NSMutableDictionary *muDict = [NSMutableDictionary dictionaryWithDictionary:dict]; NSLog(@"muDict = %@",muDict); //3:NSSet 转换成NSMutableSet NSSet *set = [[NSSet alloc]initWithObjects:@"one",@"two",@"three", nil]; NSMutableSet *muSet = [NSMutableSet setWithSet:set]; NSLog(@"muset%@",set); //4:NSArray 转换成NSSet NSMutableSet *muSet2 = [NSMutableSet setWithArray:array]; NSLog(@"muset2 %@",muSet2); //5:NSDictionary 转换成 Array 注意:NSDictionary是键值对 NSArray *allkeys = [dict allKeys]; NSLog(@"allkeys %@",allkeys); NSArray *allValues = [dict allValues]; NSLog(@"allValues 为:%@",allValues); //重点!!!!!!!!!! //6:字符串转换成数组 (相当于java中的split); //想不起来名字了你可以这么干 //①:你首先要知道你要返回什么类型,本例中肯定是NSArray //②:command +NSString 进入API中 //③:command +f 输入NSArray 你就会找到这个方法了 NSString *str = @"www.baidu.com"; NSArray *arraya = [str componentsSeparatedByString:@"."]; NSLog(@"%@",arraya); } return 0;}
0 0
- OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
- 集合框架(一)续 向集合中添加一个集合、数组和List之间的相互转换、从集合中删除另一个集合所包含的元素
- 集合之间的相互转换
- Foundation框架-08 集合对象的内存管理
- XML和Map集合之间的相互转换
- 集合与数组之间的相互转换
- 集合与数组之间的相互转换
- 集合之间及数组的相互转换
- 【Core Java Volume 4】java中数组Array和集合之间的相互转换
- 黑马程序员------Foundation框架------OC集合类的操作
- OC语法<4.2>:Foundation框架中的集合类-NSArray
- OC语法<4.3> Foundation框架中的集合类-NSDictionary
- OC语法<4.4> Foundation框架中的集合类-NSSet
- OC中Foundation集合的使用(其中包括基本数据类型与对象进行转换)
- Foundation框架: 8.OC中的集合类之三 - NSSet和NSMutableSet的基本认识
- 集合之间相互转换
- Foundation框架第二十弹:OC的内存管理
- java中数组和集合的相互转换
- nyoj 题目41:三个数从小到大排序
- 我的虚幻4之旅03 添加按键事件
- 创业第一步:为员工打工
- POJ 3468 A Simple Problem with Integers
- 12-14java面向对象之抽象类&接口
- OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
- Android访问网络,使用HttpURLConnection还是HttpClient?
- 第16周上机实践项目2——用指针玩字符串(3)
- 关于python文件操作
- 如何在ImageView组件中显示图像的一部分
- Android 服务与线程 的区别
- 黑马程序员--IOS_学习笔记_ARC
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- linux开机启动python脚本