iOS 内存管理(一)之基础知识介绍
1,什么是引用计数
所有OC对象都有一个计数器,叫做引用计数,引用计数就是目前有几个对象在使用该对象(持有该对象的引用);
2,什么是对象所有权
A对象拥有B对象的引用,A对象拥有B对象的所有权;
3,什么情况下需要retain
A对象的拥有者又增加了一个,那么A对象的拥有计数加1,此时需要使用retain(就是当其他对象需要该对象时,即其他的指针指向了该对象,那么就使该对象的引用计数加1此时需要向该对象发retain消息)
4,什么情况下需要release
A对象的拥有者又减少了一个,那么A对象的拥有计数减1,此时需要使用release(就是当该对象的拥有者不再需要该对象时,那么就可向该对象发送 release消息,使该对象的引用计数减1)
5,野指针会有什么问题,如何避免野指针和僵尸对象
野指针就是指 指向一个所占内存已经被销毁的对象的指针;野指针会使程序崩溃,而且不容易检测;
僵尸对象则是指一个所占用的内存已经被销毁的对象; -- 释放掉一个内存后,如果这个指针还需要,要么赋新值,要么给个nil;
6,自动释放池是什么
自动释放池是OC的一种内存自动管理机制,当自动释放池销毁时,会将池中的对象逐个调用release方法;
使用autorelease方法将对象放入包含它的自动释放池中;自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象(例如如果一个对象的引用计数器>1则此时就无法销毁,只是使该对象的引用计数-1)
7,什么是强指针,什么是弱指针
强指针,拥有对象所有权,引用计数+1
弱指针,可以引用对象,不会拥有对象所有权, 引用计数不变
8,assign,strong,weak有什么区别
strong:(ARC环境下对象属性的默认值)强指针,拥有对象所有权,相当于retain,引用计数+1。只要用了ARC机制,OC对象类型都推荐使用strong,不使用retain
weak:(ARC下)弱指针,可以引用对象,相当于assign赋值,不会拥有对象所有权, 引用计数不变。weak适用于OC对象 ① 弱指针会在其指向的实例对象被释放后⾃自动变成nil ② 即当弱指针指向的实例对象被释放了,弱指针也不会变成野指针
assign:适用于非指针类型 (适用于基本数据类型)
9,如何解决两个对象之间的循环引用
使用弱引用;将两个对象中的一个设为弱引用
iOS 内存管理(一)之基础知识介绍的更多相关文章
- iOS内存管理(一)
最近有时间,正好把iOS相关的基础知识好好的梳理了一下,记录一下内存相关方面的知识. 在理解内存管理之前我觉得先对堆区和栈区有一定的了解是非常有必要的. 栈区:就是由编译器自动管理内存分配,释放过程的 ...
- iOS内存管理 ARC与MRC
想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC ...
- iOS内存管理策略和实践
转:http://www.cocoachina.com/applenews/devnews/2013/1126/7418.html 内存管理策略(memory Management Policy) N ...
- Nginx基础知识介绍
Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...
- iOS内存管理布局及管理方案-理论篇
苹果设备备受欢迎的背后离不开iOS优秀的内存管理机制,那iOS的内存布局及管理方案是怎样的呢?我们一起研究下. 内存管理分为五大块 栈区(stack):线性结构,内存连续,系统自己管理内存,程序运行记 ...
- iOS内存管理个人总结
一.变量,本质代表一段可以操作的内存,她使用方式无非就是内存符号化+数据类型 1.保存变量有三个区域: 1>静态存储区 2>stack 3>heap 2.变量又根据声明的位置有两种称 ...
- IOS内存管理学习笔记
内存管理作为iOS中非常重要的部分,每一个iOS开发者都应该深入了解iOS内存管理,最近在学习iOS中整理出了一些知识点,先从MRC开始说起. 1.当一个对象在创建之后它的引用计数器为1,当调用这个对 ...
- iOS内存管理编程指南
iOS 内存管理 目录[-] 一:基本原则 二:成员变量的内存管理 三:容器对象与内存管理 四:稀缺资源的管理 五:AutoRelease 六:其他注意事项 iOS下内存管理的基本思想就是引用计数,通 ...
- iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection
浅谈iOS内存管理机制 alloc,retain,copy,release,autorelease 1)使用@property配合@synthesize可以让编译器自动实现getter/setter方 ...
- 浅谈iOS内存管理机制
iOS内存管理机制的原理是引用计数,引用计数简单来说就是统计一块内存的所有权,当这块内存被创建出来的时候,它的引用计数从0增加到1,表示有一个对象或指针持有这块内存,拥有这块内存的所有权,如果这时候有 ...
随机推荐
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?
什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就 ...
- IIS限制ip访问
1.禁止IP访问 http://jingyan.baidu.com/article/22fe7ced0462633002617f39.html 2.限制IP访问频率 http://q.cnblogs. ...
- PHP去除BOM头的方法
BOM头是UTF-8来告诉编辑器:我是UTF8编码.它的编码是\xEF\xBB\xBF 但是PHP在设计之初并没有考虑到BOM头的问题,所以在编解码的时候很容易出现问题 比如今天遇到的问题,jso ...
- SQL实现分组查询取前几条记录
我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...
- Parameter配置文件获取
public class ConfigInfo { public static ParametersHelper Parameters { get { return new ParametersHel ...
- SQL查询语言练习
USE master GO IF EXISTS (SELECT * FROM sysdatabases WHERE name='MyStudentInfoManage') DROP DATABASE ...
- 2015年百度之星初赛(1) --- D KPI
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- C# 生成XML空元素/空节点自动换行解决方案
使用DataSet可以直接输出XML,并可指定是否带有Schema: ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema ) 不过,这样将不会输出值为Null的字 ...
- sql server2008中左连接,右连接,等值连接的区别
数据库中的连接我了解到有left join,right join,inner join这些,以下是它们的区别: 1)左连接(left join):先取出a表的所有数据,再取出a.b表相匹配的数据 2) ...