第08天OC语言(18):Copy内存管理
2017-07-26 本文已影响12人
liyuhong
- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
了解到MRC情况下Copy的内存管理
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
Copy的概念
一、本章笔记
内存管理原则:
一次 alloc 对应一次 release
一次 retain 对应一次 release
一次 copy 对应 一次 release
有加就有减
总结:
如果是浅拷贝 : 不会生成新的对象, 但是系统就会对原来的对象进行retain, 所以需要对原来的对象进行一次release
如果是深拷贝 : 会生成新的对象,系统不会对以前的对象 进行retain,但是因为生成了新的对象, 所以我们需要对新的对象进行 release
二、code
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *str = [[NSString alloc]initWithFormat:@"lyh"];
NSLog(@"str = %lu",[str retainCount]);
/*
// 不会生成新的对象, 但是需要注意,正式因为不会生成新的对象,所以系统 会对以前的对象进行一次retain
// 如果是浅拷贝,那么系统就会对原来的对象 进行retain
NSString *str2 = [str copy];
NSLog(@"str = %lu",[str2 retainCount]);
[str release];
[str release];
*/
// 深拷贝, 会生成新的对象,正式因为会生成新的对象, 所以系统不会对以前的对象 进行retain,但是因为生成了新的对象,所以我们需要对新的对象进行 release
NSMutableString *strM = [str mutableCopy];
NSLog(@"str = %lu",[str retainCount]);
NSLog(@"strM = %lu",[strM retainCount]);
NSLog(@"%p - %p",str,strM);
[str release];
[strM release];
}
@end