OC语言day08-16集合中对象的内存管理

pragma mark 集合中对象的内存管理

pragma mark 概念

/**
 1.如果将一个对象添加到数组中, 那么数组 会对象 进行一次 retain
 2.当数组 移除一个对象之后, 会给这个对象 发送一条release消息

 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    
#pragma 集合中对象的内存管理
    @autoreleasepool {
        
#warning 1.如果将一个对象添加到数组中, 那么数组 会对象 进行一次 retain
        Person *p  = [Person new];
        NSLog(@"retainCount = %lu",[p retainCount]);
//        NSMutableArray *arrM = [NSMutableArray array];  // 这里不需要释放 因为使用的是类工厂方法创建 默认都加上了autorelease
        NSMutableArray *arrM = [[NSMutableArray alloc]init]; // 只有使用alloc 、new 这些 对象方法 才需要 release
        [arrM addObject:p];
        NSLog(@"retainCount = %lu",[p retainCount]);
        [p release];
        NSLog(@"retainCount = %lu",[p retainCount]);
        // 当数组对象释放之后, 会给数组中 所有的对象 发送一条release 消息
        [arrM release];
        
#warning 2.当数组 移除一个对象之后, 会给这个对象 发送一条release消息
        Person *p1  = [Person new]; // 1
        NSLog(@"retainCount = %lu",[p1 retainCount]);
        NSMutableArray *arrM1 = [[NSMutableArray alloc]init];
        [arrM1 addObject:p1]; // 2
        
        NSLog(@"retainCount = %lu",[p1 retainCount]);
        [p1 release];   // 1
        // 当数组 移除一个对象之后, 会给这个对象 发送一条release消息
        [arrM1 removeObject:p1];

        
    }
    
    
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容