您的位置:首页 > 编程语言 > C语言/C++

蓝鸥iOS从零基础到精通就业-OC语言入门 对象内存管理3

2017-01-04 14:19 429 查看
iOS从零基础到精通就业 Objective-C

CSDN观看地址:http://edu.csdn.net/course/detail/3347

对象内存管理


#import <Foundation/Foundation.h>
#import "Car.h"
#import "Person.h"

int main(int argc, const char * argv[]) {

Person *p = [[Person alloc] init];
Car *c1 = [[Car alloc] init];
[c1 setPrice:30000.0];

//把车给这个人
[p setCar:c1];//当人拥有这辆车的时候要进行引用计数+1

//人赚了钱了
Car *c2 = [[Car alloc] init];
[c2 setPrice:500000.0];

//换车
[p setCar:c2];

[c1 release];
[c2 release];
[p release];//当人死的时候要对他拥有的车引用计数-1

//copy
//不可变数组 用不可变copy相当于retain
//没有开辟新内存 只是引用计数增加了 叫浅拷贝
NSArray *array = [NSArray arrayWithObjects:@"张飞", nil];
NSArray *array1 = [array copy];//等同于retain
NSLog(@"%p  %p",array,array1);
NSLog(@"%ld  %ld",[array retainCount],[array1 retainCount]);

//不可变数组 用可变copy
//开辟新内存  叫深拷贝
NSArray *array2 = [NSArray arrayWithObjects:@"关云长", nil];
NSArray *array3 = [array2 mutableCopy];
//copy出来的结果是可变的还是不可变的??????
NSLog(@"--->>%@",[array3 class]);
NSLog(@"%p  %p",array2,array3);
NSLog(@"%ld  %ld",[array2 retainCount],[array3 retainCount]);

//可变数组用不可变copy
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:@"刘备", nil];
NSMutableArray *arr2 = [arr1 copy];
NSLog(@"%p  %p",arr1,arr2);
NSLog(@"%ld  %ld",[arr1 retainCount],[arr2 retainCount]);

//可变数组用可变copy
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"刘备", nil];
NSMutableArray *arr4 = [arr1 mutableCopy];
NSLog(@"%p  %p",arr3,arr4);
NSLog(@"%ld  %ld",[arr3 retainCount],[arr4 retainCount]);

//ARC自动引用计数  不需要管理内存 通常用strong来代替retain

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息