**内存管理 问题

1.什么是ios内存管理?

就是在对象不再被使用的时候,把它即时的从内存中清除掉

2.为什么要使用内存管理?

1.严格的内存管理,能够是我们的应用程在性能上有很大的提高

2.如果忽略内存管理,可能导致应用占用内存过高,导致程序崩溃

3.系统判断一个对象是否要被销毁的依据是什么?

每个对象创建出来的时候,都有一个retainCount属性,默认值是1,当retainCount = 0的时候,系统就会将该对像销毁

4.如何使对象的retainCount 值增加?

调用retain 对象方法

5.如何使对象的retainCount 值减少?

调用release 对象方法

6.如何判断对象已经被销毁了?

1.从写NSObject提供的,dealloc方法,当对象即将被销毁的时候,默认会调用该方法

2.dealloc方法中一定要调用[super dealloc]方法

6.1 dealloc这个函数是那里来呀?

7.内存管理原则是什么?

只要是出现new,alloc,retain,就要配对出现release操作,或者autorelease操作

**单个对象内存管理 问题

1.什么是野指针?

对象的retainCount已经为0,保存了对象指针地址的变量就是野指针

1.1 使用野指针会有什么问题?

使用野指针调用对象的方法,会导致野指针异常,导致程序直接崩溃

2.什么是僵尸对象?

retainCount = 0的对象被称之为僵尸对象,也就是不能够在访问的对象

2.1是什么问题导致,访问僵尸对象,时而正确时而错误?

2.2如何开始xcode的时时检测僵尸对象功能?

3.如何防止出现野指针操作?

通常在调用完release 方法后,会把保存了对象指针地址的变量清空,赋值为nil

在oc中没有空指针异常,所以使用[nil retain]调用方法不会导致异常的发生

4.什么是内存泄漏?

已经不在使用的对象,没有正确的释放掉,一直驻留在内存中,我们就说是内存泄漏

5.内存泄漏有几种情况?

1.没有配对释放,不符合内存管理原则

2.对象提前赋值为nil或者清空,导致release方法没有起作用

6.当对象的retainCount = 0 时 能否调用 retain方法使对象复活?

已经被释放的对象是无法在复活的

7.关于内存我们主要研究的问题是什么?

1.野指针

2.内存泄露

**多个对象内存管理 问题

1.对象与对象之间存在几种关系?

1.继承关系

2.组合关系

3.对象作为方法参数传递

2.对象的组合关系中,如何确保作为成员变量的对象,不会被提前释放?

重写set方法,在set方法中,retain该对像,使其retainCount值增加 1

3.组合关系导致内存泄漏的原因是什么?

在set方法中,retain了该对象,但是并没有配对释放

4.作为成员变量的对象,应该在那里配对释放?

在dealloc函数中释放

** set方法内存管理 问题

1.在对象的组合关系中,导致内存泄漏有几种情况?

1.set方法中没有retain对象

2.没有release掉旧的对象

3.没有判断向set方法中传入的是否是同一个对象

2.该如何正确的重写set方法?

1.先判断是否是同一个对象

2.release一次旧的对象

3.retain新的对象

**内存管理@property参数 问题

1.@property参数分为几类?

1.与set方法内存管理相关的参数

2.是否要生成set方法相关

3.多线程相关

4.set和get方法的名称相关

2.@property参数那些适用于对象类型,那些适用于基本数据类型

3.如何使用@property生成符合内存管理的set方法?

4.@property retain参数能否用于基本数据类型?

**手动内存管理类的循环引用 问题

1.什么情况下会出现类的循环应用?

2.@class关键子的作用?

3.手动内存管理如何解决类的循环引用问题?

4.在.h文件中使用@class关键字声明一个类后,在.m文件中是否能够直接掉用该对象的方法?

**自动释放池 问题

1.什么是自动释放池?

自动释放池是用来存储多个对象类型的指针变量

2.自动释放池对池内对象的作用?

被存入到自动释放池内的对象,当自动释放池被销毁时,会对池内的对象全部做一次release操作

3.对象如何放入到自动释放池中?

当你确定要将对象放入到池中的时候,只需要调用对象的 autorelease 对象方法就可以把对象放入到自动释放池中

4.如何创建自动释放池?

对象在自动释放池内部调用autorelease 方法

5.自动释放池能否嵌套使用?

6.自动释放池何时被销毁?

在autorelease } 执行完后

7.多次调用对象的autorelease方法会导致什么问题?

多次将地址存到自动释放池中,导致野指针异常

8.自动释放池作用

将对象与自动释放池建立关系,池子内调用autorelease 方法,在自动释放池销毁时销毁对象,延迟release销毁时间

**自动释放池应用 问题

1.实际开发中一般如何使用autorlease

就是在方法中创建新的对象并且需要返回的时候

快速创建一个类方法

**ARC机制 问题

1.什么是ARC机制

自动引用计数,不需要程序员关心,对象的retain,与release操作

2.什么是强指针(strong),弱指针(weak)

3.ARC机制中,系统判断对象是否被销毁的依据是什么?

指向对象的强指针是否被销毁

4.ARC机制中,如何观察对象被销毁了?

5.ARC机制中为什么还有autoreleasepool?

6.ARC机制的本质是什么?

对releaseCount的计算,创建对象 +1, 清空指针 -1,或者越到autoreleasepool的大括号 -1

7.ARC的目的

是让程序员不在关心对象的retainCount

**ARC机制 @property参数 问题

1.ARC机制中如何让@property生成符合内存管理的set方法

2.@property weak参数能否用于基本数据类型?

不能

3.为什么在ARC机制中,不建议使用assign类表示对象的直接赋值

4.ARC机制中不建议使用retain,assign ,容易造成混淆

**手动内存管理代码转换成ARC代码 问题

1.如何使用xcode自带的功能,将手动内存管理代码转换成ARC机制代码

手动内存管理与ARC机制代码共存 问题

1.为什么会出现手动内存管理与ARC机制代码共存现象?

2.为什么不统一的将代码都转换成ARC机制?

3.如何才能够让手动内存管理的代码与ARC机制的代码共存?

**ARC机制中类的相互引用 问题

1.ARC机制中类的相互引用,与手动内存管理类的相互引用有什么区别吗?

2.如何解决ARC机制下类的相互引用问题?

在.h文件中使用@class关键字声明一个类,两端不能都用强指针

一端用strong,一端用weak

oc内存管理总结(一)的更多相关文章

  1. OC 内存管理机制总结

    OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...

  2. OC内存管理基础

    OC 内存管理基础 一. retain和release基本使用 使用注意: 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就 ...

  3. QF——OC内存管理详解

    堆的内存管理: 我们所说的内存管理,其实就是堆的内存管理.因为栈的内存会自动回收,堆的内存需要我们手动回收. 栈中一般存储的是基本数据类型变量和指向对象的指针(对象的引用),而真实的对象存储在堆中.因 ...

  4. OC内存管理-OC笔记

    内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...

  5. OC内存管理-黄金法则

    1.内存管理-黄金法则 The basic rule to apply is everything that increases the reference counter with alloc, [ ...

  6. OC内存管理总结,清晰明了!

    <span style="font-size:18px;">OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限.所以每一个APP所占的 ...

  7. 31 (OC)* 内存管理

    31 (OC)  内存管理 一:内存管理黄金法则. 如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease 二:内存管 ...

  8. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  9. 【0 - 1】OC内存管理

    一.内存管理概述 垃圾回收机制(GC):由系统管理内存,程序员不需要管理. OC中的垃圾回收:在OC2.0版加入垃圾回收. OC与iOS:OC有垃圾回收机制,但是iOS屏蔽了这个功能.原因:iOS运行 ...

  10. OC内存管理(ARC)

    1.什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化.ARC是新的LLVM 3. ...

随机推荐

  1. bootstrap 常用类名

    一. 常用类1.container居中的内容展示2.row  行内容显示3.col 列内容显示, 列必须在row 中xs 宽度小于768 ,sm宽度小于990 大于768 ,md 宽度大于990,小于 ...

  2. tomcat6.0目录和server.xml详解

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.x,相对5.x性能提升很多,主要优化了内存使用,增强IO能力,重新构造集群功能. 近期对Tomcat6.x作深入学习, ...

  3. ListView加载两种以上不同的布局

    不同的项目布局(item layout) Listview一种单一的item 布局有时候不能完全满足业务需求,我们需要加载两种或两种以上不同的布局,实现方法很简单: 重写 getViewTypeCou ...

  4. C# List<T>的详细用法

    所属命名空间:System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类.该类使用大小可按需动态增加的数组实现 IList<T> ...

  5. SPOJ QTREE 系列解题报告

    题目一 : SPOJ 375 Query On a Tree http://www.spoj.com/problems/QTREE/ 给一个树,求a,b路径上最大边权,或者修改a,b边权为t. #in ...

  6. phpmyadmin上传较大sql文件

    1.找到phpmyadmin目录,新建文件夹import 2.打开import文件夹,将要导入的sql文件放进去 3.打开config.inc.php文件,修改$cfg['UploadDir']等于i ...

  7. js中的this指向

    1, 指向window 全局变量 alert(this) //返回 [object Window] 全局函数 function sayHello(){ alert(this); } sayHello( ...

  8. entity framework 6 通用数据类

    原文  http://blog.csdn.net/laokaizzz/article/details/25730813 public class BaseDAL { string strConn = ...

  9. try-catch-finally块的运行机制

    try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说,我 ...

  10. 九、 合成(Composite)模式 --结构模式(Structural Pattern)

    合成模式:有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式分为安全式和透明式 ...