zoukankan      html  css  js  c++  java
  • 内存管理 ios

    用alloc,new,copy和mutableCopy创建的对象必须自己释放,其他对象都可以当成是引用计数为1且位于自动回收池中。

    1. NSString *second = [[NSString alloc] init]; //second的引用计数为1

        [someStringArray addObject: second]; //2 。被插入数组中,数组回自动持有加入其中对象。//需要一次release
     
    2. NSString *sixth = [NSString stringWithString:@"Toughie"]; //1
        NSArray *anotherArray = [NSArray arrayWithObjects: sixth count:1]; //2
        NSDictionary *newDictionary = [NSDictionary dictionaryWithObjects:sixth forKeys: @"toughie"     count:1]; //3
        NSString *ignoreMe = [sixth retain]; //4.最后需要一次release,对应retain
     
     

    管理对象图以避免内存泄漏:

    对象之间的引用还有强弱之分,默认情况下,Objective-C 中的引用是强引用。这通常是件好事,但是,一不小心,对象之间的强引用会形成一个不能断开的引用链,如图,如果断开 A 和 B 之间的引用,则包含 B、C、D 和 E 的子图形将“永远”存在。对强引用循环的解决之道,在于明智地使用弱引用,一个对象未被强引用时,该对象将被释放,对该对象的所有弱引用都会设定为 nil。对于变量(全局、实例和局部),在变量名称前面使用 __weak 限定符,以将引用标记为弱。

     

    • 委托

      @property(weak) id delegate;

      将在“设计模式”文章“采用设计模式使您的应用程序合理化”中了解有关委托和目标的信息。

    • 未引用顶级对象的 Outlet

      @property(weak) IBOutlet NSString *theName;

      Outlet 是对象之间的连接(或引用),归档在串联图或 nib 文件中,且在应用程序载入该串联图或 nib 文件时得到恢复。串联图或 nib 文件中顶级对象(通常是窗口、视图、视图控制器或其他控制器)的 outlet 应该为 strong(默认值,因此无标记)。

    • 目标

      (void)setTarget:(id __weak)target
    • 在块内对 self 的引用

      __block typeof(self) tmpSelf = self;
      [self methodThatTakesABlock:^ {
          [tmpSelf doSomething];
      }];

      一个块对它所捕捉的变量构成强引用。如果在块内使用 self,该块对 self 构成强引用。因此,如果 self 也具有对该块的强引用(通常都有),将产生强引用循环。要避免循环,您需要在块外创建对 self 的 weak(或 __block)引用,如以上例子所示。

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/liuhong/p/3277604.html
Copyright © 2011-2022 走看看