第08天OC语言(18):Copy内存管理

  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

了解到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

推荐阅读更多精彩内容