zoukankan      html  css  js  c++  java
  • 【iOS系列】-iOS中内存管理

     iOS中创建对象的步骤:

      1,分配内存空间,存储对象
      2,初始化成员变量
      3,返回对象的指针地址

    第一:非ARC机制:

    1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对象的唯一标示,当我们的应用计数retainCount = 0的时候,系统会回收当前对象
    2,[对象 release] retainCount - 1;
    3,[对象 retain] retailCount + 1;
    4,当应用计数retailCount = 0的对象就会被销毁;

    5,dealloc函数,当一个对象销毁的时候,系统会自动调用dealloc函数,通知对象将要被销毁

    内存管理原则(配对原则):只要出现了new,alloc,retaim,就一定配对出现一个release,autorelease

      注:EXC_BAD_ACCESS 访问了不可访问的内存空间
      被系统回收的对象,称为僵尸对象
      默认情况下,xcode为了提高编码效率,不会时时检查僵尸对象

    手动内存研究问题包括:
      1,野指针操作
      2,内存泄露:不再使用的对象,一直在内存中没有被销毁


    //面试笔试,出题率非常高

    - (void)setCar:(Car *)car
    {
      if (_car != car)
      { //relese旧值
        [_car release];//[nil release];
        //retain新值
        _car = [car retain];
      }
    }
    - (Car *)car
    {
      return _car;
    }
    - (void)dealloc
    {
      //目的是要保证在p对象存在的时候,car对象一定存在
      [_car release];
      [super dealloc];
      NSLog(@"Person 被销毁了");
    }

    第二:ARC机制

    研究ARC机制,就必须清楚@property的作用:

      1.生产get与set方法的声明
      2.生成get与set方法的简单实现
      3.若果你没有声成名相对象的成员变量,那么他会自动生成一个_开头的成员变量

    @property 参数分为4类

    1.与set方法内存管理相关参数
      retain: 要生成符合内存管理原则的set方法(应用与对象类型)
      assign: 直接赋值,(对象类型,基本数据类型),简单的
      copy : 


    2.多线程相关

        nonatomic: 不生成多线程线管代码,使用这个就可以了(效率高一点)
      atomic:生成多线程线管代码(不写默认是这种方式)
      实际开发中,只要是对象类型的@property都写成下面

    3.是否要生成set与get方法
      readwrite: 可读可写属性,同时生成set与get方法
      readonly : 只读属性,只生成get方法

    4.set与get方法名称相关的参数
      setter:设置生成的set方法名称
      getter:设置生成的get方法名称

    例如:

     @property (nonatomic,retain) Car * car;

    @property (nonatomic,retain)NSString * name;
    @property (nonatomic,assign)int age; //int float double char
    @property (nonatomic,assign)int weight;
    @property (nonatomic,assign,readonly)int idCard;
    //改变set与get方法名称很多都是用在BOOL类型的变量
    @property (nonatomic,assign,setter = isDeid:,getter = isDeid)BOOL isDeid;

  • 相关阅读:
    『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
    『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
    『开源』简单的代码统计工具 开源啦[有图有真相]
    文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类
    DB2:FETCH FIRST 1 ROWS ONLY
    IEnumerable的几个简单用法
    一个字符串中包含逗号个数
    字符串处理总结之一(C#String类)
    C# 中DateTime的各种使用
    C# 键值对类相关
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4306276.html
Copyright © 2011-2022 走看看