zoukankan      html  css  js  c++  java
  • Objective-C之集合对象的内存管理

    集合对象的内存管理

    本小节知识点:

    1. 【掌握】集合对象的内存管理
    2. 【理解】集合对象内存管理总结

    1.集合对象的内存管理

    • 当一个对象加入到集合中,那么该对象的引用计数会+1
    • 当集合被销毁的时候,集合会向集合中的元素发送release消息
        NSMutableArray *arr = [[NSMutableArray alloc] init];
    
        Person *p = [[Person alloc] init];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [arr addObject:p];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [p release];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [arr release];
    • 当一个对象加入到集合中,那么该对象的引用计数会+1
    • 当把一个对象从集合中移除时,会向移除的元素发送release消息
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        Person *p = [[Person alloc] init];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [arr addObject:p];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [arr removeObject:p];
        NSLog(@"retainCount = %lu", [p retainCount]);
        [p release];
        [arr release];

    2.集合对象内存管理总结

    • 1.官方内存管理原则

      • 1> 当调用alloc、new、copy(mutableCopy)方法产生一个新对象的时候,就必须在最后调用一次release或者autorelease
      • 2> 当调用retain方法让对象的计数器+1,就必须在最后调用一次release或者autorelease
    • 2.集合的内存管理细节

      • 1> 当把一个对象添加到集合中时,这个对象会做了一次retain操作,计数器会+1
      • 2> 当一个集合被销毁时,会对集合里面的所有对象做一次release操作,计数器会-1
      • 3> 当一个对象从集合中移除时,这个对象会一次release操作,计数器会-1
    • 3.普遍规律

      • 1> 如果方法名是addinsert开头,那么被添加的对象,计数器会+1
      • 2> 如果方法名是removedelete开头,那么被移除的对象,计数器-1

  • 相关阅读:
    多线程使用常识
    《30天自制操作系统》实现中文显示
    DDD实践(一)
    为了钱这是很正当的,我跟你干,我要获得一个好的收入,我要改善我的生活,我要提高我的生活质量(转)
    Java对象序列化/反序列化的注意事项(转)
    Java使用Socket传输文件遇到的问题(转)
    大胆采用开源工具(转)
    如果常量类进行改变时,只编译常量类,而使用常量的类不重新编码,这样改动实际上算没有生效(转)
    在html中写python代码的语法和特点-----基于webpy的httpserver
    在Activity中为什么要用managedQuery()
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4966314.html
Copyright © 2011-2022 走看看