iOS开发发现了一个内存现象

最近无意间发现了一个内存现象,分享给大家。具体代码如下:

 NSMutableSet *set = [NSMutableSet new];
    for (NSInteger i = 0; i < 10; i++) {
        AModel *amodel = [AModel new];
        NSString *address = [NSString stringWithFormat:@"%p",amodel];
        [set addObject:address];
        NSLog(@"amodel %@",address);
    }
    NSLog(@"count %@",@([set count]));

运行结果如下:

2020-05-22 23:30:03.554085+0800 MVVMDemo[33161:12251195] amodel 0x600001b5a1e0
2020-05-22 23:30:03.554229+0800 MVVMDemo[33161:12251195] amodel 0x600001b1d2e0
2020-05-22 23:30:03.554308+0800 MVVMDemo[33161:12251195] amodel 0x600001b14d80
2020-05-22 23:30:03.554378+0800 MVVMDemo[33161:12251195] amodel 0x600001b1d2e0
2020-05-22 23:30:03.554530+0800 MVVMDemo[33161:12251195] amodel 0x600001b4c6a0
2020-05-22 23:30:03.554611+0800 MVVMDemo[33161:12251195] amodel 0x600001b14d80
2020-05-22 23:30:03.554673+0800 MVVMDemo[33161:12251195] amodel 0x600001b1d2e0
2020-05-22 23:30:03.554734+0800 MVVMDemo[33161:12251195] amodel 0x600001b1d2e0
2020-05-22 23:30:03.554808+0800 MVVMDemo[33161:12251195] amodel 0x600001b1d2e0
2020-05-22 23:30:03.554889+0800 MVVMDemo[33161:12251195] amodel 0x600001b5a200
2020-05-22 23:30:03.554962+0800 MVVMDemo[33161:12251195] count 5

大家可以发现创建了10个对象,但是内存地址却只有5个,创建的10个对象里,有一些对象的内存地址的指针是一样的。分析下来估计由于for循环创建对象较快,而且又要快速的释放,系统重新创建的时候发现还有未来得及释放的对象的类型和要创建的一样,所以不再开辟内存空间,直接拿来就用了。

更多干货文章,欢迎扫描二维码关注公众号
这里写图片描述

你可能感兴趣的:(IOS,ios,objective-c,内存管理)