OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换

一:集合的内存管理                                                                                                                                   

集合类中的内存管理都是一个模式的,以下面就以数组为例;

①:首先调成手动内存管理模式

②:创建一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值