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)引用,如以上例子所示。

  • 相关阅读:
    04 UUID
    MD5加密算法(信息摘要算法)、Base64算法
    03 MD5加密、Base64处理
    MVC分层思想、SSM编程架构
    1网络编程基本概念
    Tomcat闪退的解决办法
    win10下的jdk1.8安装
    枚举练习
    1000元买物品分配
    win10解决vc++6.0不兼容问题方法
  • 原文地址:https://www.cnblogs.com/liuhong/p/3277604.html
Copyright © 2011-2022 走看看