虽然iOS已经有了ARC帮你自动管理内存,但在有些项目中必须采用手动的方式,而且在懂得手动管理内存的情况下会是自己的代码更加完善

众所周知,基于手动管理内存的情况下必然涉及到 relese  retain autorelese copy 等。

其中 relese就是把对象的引用计数减一    retain表示把对象的引用计数加一   autorelese则是为一个叫做  内存池 的东西准备的  

 @autoreleasepool {

       

    }

当你创建的对象加入到了内存池中,并且创建对象时用了  autorelese,则当内存池销毁时会自动帮对象调用autorelese 

而copy则是拷贝一份 此时原有的对象其引用计数并不增加  ,当然涉及到拷贝的话又分为 浅拷贝 和 深拷贝, 不懂得可以上网查 很多的。

iOS手动管理内存

 上面这张图是官网上的。可以看看  描述的挺好的。下面通过一点小代码来说明下今天的主题:

注意:relese autorelese  retain  他们操作的是对象的引用计数  而对于该变量本身是无影响的(除非所指的对象引用计数为零了),

如:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSString *a = [[NSString alloc]initWithUTF8String:"women"];//a所指的对象引用计数为1
    
  
    NSLog(@"a  reference is : %d",a.retainCount);
    NSLog(@"a = %@ ",a);
    NSString *b = a;//b 和 a 指向同一个对象
    [b retain];//b 把 应用计数加一了
    NSLog(@"a  reference is : %d",a.retainCount);
    NSLog(@"b   reference is : %d",b.retainCount);
    NSLog(@"b = %@ ",b);

    [a release];
    
    NSLog(@"after a relese a  reference is : %d",a.retainCount);
    NSLog(@"agter a relese b   reference is : %d",b.retainCount);
    NSLog(@"a = %@ ",a);
    NSLog(@"b = %@ ",b);

}
View Code

相关文章:

  • 2021-12-13
  • 2021-05-06
  • 2022-02-14
  • 2021-12-08
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2021-06-02
  • 2022-12-23
  • 2021-11-28
相关资源
相似解决方案