OC学习:OC内存中的内存的难点
来源:互联网 发布:苹果系统基于linux 编辑:程序博客网 时间:2024/06/05 18:53
//OC内存中的内存的难点
//1.将对象添加到数组中会增加其引用计数
Student *st = [Student new];
NSMutableArray *mArray = [[NSMutableArray alloc] init];
[mArray addObject:st];
[mArray addObject:st];
[mArray addObject:st];
NSLog(@"mArray = %ld,st = %ld",mArray.retainCount,st.retainCount);
[mArray release];
[st release];
//对于不可变数组、集合如果用[[NSArray alloc] init]方法初始化,那么他们会指向同一片内存空间,使得这一片内存的引用计数增加。
NSArray *array = [[NSArray alloc] initWithObjects:@"da",@"da", nil];
NSLog(@"array = %ld",array.retainCount);
[array release];
NSArray *array2 = [[NSArray alloc] init];
NSLog(@"array2 = %ld",array2.retainCount);
NSArray *array3 = [[NSArray alloc] init];
NSLog(@"array3 = %ld",array3.retainCount);
NSLog(@"array2 = %p,array2 = %p",array2,array3);
NSSet *set1 = [[NSSet alloc] init];
NSSet *set2 = [[NSSet alloc] init];
NSLog(@"set1 = %p,set2 = %p",set1,set2);
[array2 release];
[array3 release];
[set1 release];
[set2 release];
//不可字符串的快速初始化方法,不提供应用计算操作。
NSString *string = @"adsf";
[string retain];
NSLog(@"string = %ld",string.retainCount);
//对于copy,在不变对象时为浅拷贝,会增加对象的引用计数,返回对象地址,对于可变对象为深拷贝,不增加对象的引用计数,会复制出一个引用计数为1的副本,返回副本地址。
NSString *stringCopy1 = [[NSString alloc] initWithFormat:@"wo"];
[stringCopy1 retain];
NSString *stringCopy2 = [stringCopy1 copy];
NSMutableString * mStringCopy1 = [[NSMutableString alloc] initWithFormat:@"wo"];
NSMutableString * mStringCopy2 = [mStringCopy1 copy];
NSLog(@"stringCopy1 = {%ld,%p},stringCopy2 = {%ld,%p}",stringCopy1.retainCount,stringCopy1,stringCopy2.retainCount,stringCopy2);
NSLog(@"mStringCopy1 = {%ld,%p},mStringCopy2 = {%ld,%p}",mStringCopy1.retainCount,mStringCopy1,mStringCopy2.retainCount,mStringCopy2);
[stringCopy1 release];
[stringCopy1 release];
[stringCopy2 release];
[mStringCopy1 release];
[mStringCopy2 release];
//1.将对象添加到数组中会增加其引用计数
Student *st = [Student new];
NSMutableArray *mArray = [[NSMutableArray alloc] init];
[mArray addObject:st];
[mArray addObject:st];
[mArray addObject:st];
NSLog(@"mArray = %ld,st = %ld",mArray.retainCount,st.retainCount);
[mArray release];
[st release];
//对于不可变数组、集合如果用[[NSArray alloc] init]方法初始化,那么他们会指向同一片内存空间,使得这一片内存的引用计数增加。
NSArray *array = [[NSArray alloc] initWithObjects:@"da",@"da", nil];
NSLog(@"array = %ld",array.retainCount);
[array release];
NSArray *array2 = [[NSArray alloc] init];
NSLog(@"array2 = %ld",array2.retainCount);
NSArray *array3 = [[NSArray alloc] init];
NSLog(@"array3 = %ld",array3.retainCount);
NSLog(@"array2 = %p,array2 = %p",array2,array3);
NSSet *set1 = [[NSSet alloc] init];
NSSet *set2 = [[NSSet alloc] init];
NSLog(@"set1 = %p,set2 = %p",set1,set2);
[array2 release];
[array3 release];
[set1 release];
[set2 release];
//不可字符串的快速初始化方法,不提供应用计算操作。
NSString *string = @"adsf";
[string retain];
NSLog(@"string = %ld",string.retainCount);
/*
在UI中:
引用计数为-1,无法retain,但是用initWithForm:方法可以
但是在OC中initWithForm:方法可以也是无法改变引用计数的。
//对于copy,在不变对象时为浅拷贝,会增加对象的引用计数,返回对象地址,对于可变对象为深拷贝,不增加对象的引用计数,会复制出一个引用计数为1的副本,返回副本地址。
NSString *stringCopy1 = [[NSString alloc] initWithFormat:@"wo"];
[stringCopy1 retain];
NSString *stringCopy2 = [stringCopy1 copy];
NSMutableString * mStringCopy1 = [[NSMutableString alloc] initWithFormat:@"wo"];
NSMutableString * mStringCopy2 = [mStringCopy1 copy];
NSLog(@"stringCopy1 = {%ld,%p},stringCopy2 = {%ld,%p}",stringCopy1.retainCount,stringCopy1,stringCopy2.retainCount,stringCopy2);
NSLog(@"mStringCopy1 = {%ld,%p},mStringCopy2 = {%ld,%p}",mStringCopy1.retainCount,mStringCopy1,mStringCopy2.retainCount,mStringCopy2);
[stringCopy1 release];
[stringCopy1 release];
[stringCopy2 release];
[mStringCopy1 release];
[mStringCopy2 release];
0 0
- OC学习:OC内存中的内存的难点
- oc中的内存管理
- oc中的内存管理机制
- oc中的内存管理
- OC中的内存管理
- 【OC中的内存管理知识】
- OC中的内存管理
- OC中的内存管理
- OC中的内存管理
- oc中的内存管理
- OC中的内存管理
- OC中的内存管理机制
- OC中的内存管理
- OC学习--内存管理
- OC学习----内存管理
- OC学习笔记之OC对象的内存管理
- OC学习笔记之OC对象的内存管理二
- oc中的内存管理的初步
- 第一篇博客纪念
- mysql my.conf utf8 编码设置
- 没有指定属性的某个标签
- HDU 2099 整除的尾数
- 【Java并发编程实战】—–synchronized
- OC学习:OC内存中的内存的难点
- 工作站计算机
- 为php添加拓展模块
- JSONArray json = JSONArray.fromObject(list_excel); list类型数据转换成JSONArray类型数据报错
- MySQL常用命令
- NYOJ58:最少步数【深搜】
- CSFR攻击学习笔记(一)
- HDU 5349 MZL's simple problem (STL 优先队列)
- HTTP协议状态码详解(HTTP Status Code)