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;

时间: 2024-12-23 21:10:15

iOS中内存管理的相关文章

[转载]对iOS开发中内存管理的一点总结与理解

对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作的理解是衡量一个程序员成熟与否的一个标准.好了,闲话不说,下面进入正题. 众所周知,ObjectiveC的内存管理引用的一种叫做“引用计数“ (Reference Count)的操作方式,简单的理解就是系统为每一个创建出来的对象,(这里要注意,只是对象,NSObject的子类,基本类型没有‘引用计数’)

说说iOS与内存管理(上)

http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责释放”这种基本原则是很重要的,但不是本文要讨论的重点.之前本人还没在小站发过相关的文章,本篇文章中,我本人是想结合实际开发和调试中遇到的一些细节问题,来谈谈iOS的内存管理内在机制和调试方法. 上一篇文章已经是4月份的了,时间飞快又过去了好久,小站5月份没有文章更新,罪过罪过.最近小站的站长我又转换

【点杀ios】内存管理

1.为什要进行内存管理 ios中,每个应用程序所能占有的内存是有限制的.如果你的应用程序所占用的内存超过了这个限制,系统会给你发出内存警告.如果警告后你的程序依然继续占用过多内存,那么系统有可能强制关闭你的应用程序(闪退).并且,如果内存管理没做好,对程序的流畅度也会产生很大的影响.所以,我们在开发应用程序的过程中,要进行内存管理. 2.对什么进行管理: 内存分为堆内存和栈内存.栈内存的分配和释放是系统做的,程序员无法参与.而堆内存,是程序员进行管理的.分配和释放是程序员完成的. 任何继承了NS

理解 iOS 的内存管理

理解 iOS 的内存管理 远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳,而我还是一个默默无闻的刚毕业的小子.那个时候的 iOS 开发过程是这样的: 我们先写好一段 iOS 的代码,然后屏住呼吸,开始运行它,不出所料,它崩溃了.在 MRC 时代,即使是最牛逼的 iOS 开发者,也不能保证一次性就写出完美的内存管理代码.于是,我们开始一步一步调试

总结 IOS 7 内存管理

[iOS7的一些总结]5.iOS中的内存管理 我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法, 即自动引用计数ARC.采用了ARC之后,绝大部分内存管理的问题就不需要我们继续操心了.但是从另一个方面讲,这个方便的工具也助长了程序员的懒惰情 绪,很多新手和学生甚至连引用计数的含义都不清楚.的确,这部分内容相对比较难以理解,不过如果能深刻地领悟之后将会是未来学习和开发中的强大助推器. 1.关于对象所有权的概念:

简述OC中内存管理机制。

1        简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic .atomic.strong.weak属性的作用? OC使用了一种叫做引用计数的机制来管理对象,如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者aut

iOS之内存管理(ARC)

iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方面要注意的地方. Autorelease 提到内存管理,就不得不提autorelease,虽然我们平时开发中很少会感知到它的存在.autorelease就是自动释放的意思,如果变量使用autorelease来修饰,就表明变量的释放由系统来完成. autoreleasepool是由runloop在开启

iOS之“内存管理”篇

什么是内存管理? 内存管理的是堆空间,内存管理的任务:保证开辟的空间能够被正确释放. 内存管理存在的问题?? [内存泄露]开辟的空间未释放. [提前释放]堆空间没有使用完毕,就已经释放了. [重复释放]开辟同一个空间,被释放多次. [注]内存泄露和提前释放短时间内不会造成系统崩溃,但是重复释放直接造成系统崩溃. C语言中内存管理的困境? 必须清楚一块堆空间,到底有几个指针指向,在通过其中一个指针free该空间时,必须保证所有的指针必须使用完毕了,避免[提前释放].而且必须保证只能这些指针中的一个

Linux中内存管理

转载自:http://blog.chinaunix.net/uid-26611383-id-3761754.html 前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识. 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术有哪些特点,为什么会被目前的技术所取代,而目前的技术又解决了之前的