OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
2014-12-14 17:52
543 查看
一:集合的内存管理
集合类中的内存管理都是一个模式的,以下面就以数组为例;
①:首先调成手动内存管理模式
②:创建一个person对象
本节小节知识点:
1:当我们把一个对象存入到数组的时候,数组会对这个对象进行一次retain操作
2:当我们把一个对象移除到数组中的时候,数组会对这个对象会进行一次release操作
3:当对象被销毁的时候,会对内部所有的对象进行一次release操作
二:ARC机制下的内存管理
ARC机制下是否担心内存泄露呢?
本节知识点:
1:当一个对象被存入集合的时候,默认会保存它的强指针
2:当一个对象从集合中删除的时候,会释放掉这个强指针
三:集合之间的相互转换
1:不可变集合转变成可变集合
2:NSArray转换成NSSet
3: 字符串串转换成数组(重点,相当于java中的split);
集合类中的内存管理都是一个模式的,以下面就以数组为例;
①:首先调成手动内存管理模式
②:创建一个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; }
相关文章推荐
- OC语法<4.4> Foundation框架中的集合类-NSSet
- OC语法<4.2>:Foundation框架中的集合类-NSArray
- OC语法<4.3> Foundation框架中的集合类-NSDictionary
- OC语法<4.8> Foundation框架中的-常用结构体和基本数据类型包装类
- json <--->List集合,实体类 之间的相互转换
- OC语法<4.7> Foundation框架中的-日期操作
- json <--->List集合,实体类 之间的相互转换
- json <--->List集合,实体类 之间的相互转换
- C#List<string>和string[]之间的相互转换
- OC语法<2.3>内存管理:ARC机制下的内存管理
- string(有格式)、string[]、List<string>之间相互转换
- List<string>和string[]之间的相互转换
- ilist<T> 与list<T> 之间的相互转换
- List<string>和string[]数组之间的相互转换
- 集合框架(一)续 向集合中添加一个集合、数组和List之间的相互转换、从集合中删除另一个集合所包含的元素
- C#List<string>和string[]之间的相互转换
- 黑马程序员--OC之Foundation框架的使用<二>
- 20140704-C#object/List<object>与json、xml之间的相互转换
- C#List<string>和string[]之间的相互转换
- ilist<T> 与list<T> 之间的相互转换