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
原创粉丝点击