美文网首页
iOS36 -- 内存管理MRC以及copy修饰词

iOS36 -- 内存管理MRC以及copy修饰词

作者: 恋空K | 来源:发表于2021-03-30 15:50 被阅读0次
    该命令行项目运行完,就直接退出了。程序退出了,你刚刚没有释放掉这个person,也没有关系,因为你整个程序都被干掉了,也就是刚刚没有释放掉的内存,也全都会被销毁,这个是没有问题的。因为只要程序一退出,内存泄露啊,刚刚忘掉释放的内存啊,都不要紧
    内存泄露:就是该释放掉的对象没有释放 
    调用autorelease 的对象,系统会在恰当的时候给它发送一条release消息
    
    MRC--父类的dealloc放到最后
    MRC--set方法的内存管理,先释放掉以前的,在把新的进行retain加1
    MRC--优化写法,只有传进来的新值跟旧值不一样时,才执行旧值的release操作,新值的retain操作
    @synthesize 左边是属性名,右边是成员变量名
    @synthesize的作用
    在以前@property声明的属性只会帮我们生成set方法和get方法的声明,不会帮我们生产成员变量,set方法和get方法的实现。--但是随着编译器的发展,property声明的属性会帮我们生成set方法和get方法的声明,并且生成带下划线的成员变量,以及set方法和get方法的实现

    不管左边的调用者是谁,只要调用的是copy方法,返回的就是不可变的。只要调用的是mutableCopy,返回的就是可变的
    不可变对象调用copy时,copy就相当于retain,
    



    不可变数组的浅拷贝,深拷贝
    可变数组的浅拷贝,深拷贝
     NSArray *array1 = [[[NSArray alloc] initWithObjects:@"a", @"b", nil] autorelease]; 
    等价于NSArray *array1 = [NSArray arrayWithObjects:@"a",@"b", nil];
    fundation里面的很多类,一般通过类方法创建出来的类,里面都已经做了autorelease操作了
    原则:只要这个对象不是通过alloc创建或者new创建返回的,一般就不需要进行release操作
    
    array方法里面大概长这样
    不可变字典的浅拷贝,深拷贝
    可变字典的浅拷贝,深拷贝
    copy和mutableCopy总结
    p1调用copy方法的话,调用的就是p1下面的copyWithZone方法
    自定义类的copy,需要遵守NSCopying协议

    相关文章

      网友评论

          本文标题:iOS36 -- 内存管理MRC以及copy修饰词

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