美文网首页
第08天OC语言(18):Copy内存管理

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

作者: liyuhong | 来源:发表于2017-07-26 08:37 被阅读12次
    • 不要等到明天,明天太遥远,今天就行动。
    须读:看完该文章你能做什么?

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

    相关文章

      网友评论

          本文标题:第08天OC语言(18):Copy内存管理

          本文链接:https://www.haomeiwen.com/subject/zgfekxtx.html