一:集合的内存管理
集合类中的内存管理都是一个模式的,以下面就以数组为例;
①:首先调成手动内存管理模式
②:创建一个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;
}