IOS 非ARC开发内存管理的几条规则
关于ios内存管理。在开发过程中,内存管理很重要,我简单说明一下。
1.正确用法
UIView *v = [[UIView alloc] init]; //分配后引用计数为1
[self.view addSubview:v]; //这儿引用计数加1,为2
[v release]; //这儿引用计数为1
最后系统在回收self.view的时候,会先回收其subView,所以v会被自动回收
2.如果v是类的成员变量,写了如下代码,不需要再在类的dealloc方法里[v release];
v = [[UIView alloc] init];
[self.view addSubview:v];
[v release];
如果在dealloc里调用了release,那么就多release了,会crash.
3.如果v是类的属性,分两种情况
a. @property (nonatomic, assign) UIView *v; 这儿是assign, 然后分配内存的时候如果是这样
v = [[UIView alloc] init];
[self.view addSubview:v];
[v release];或是这样用
v = [[UIView alloc] init];
[self.view addSubview:v];
[v release];
都不需要在dealloc里[v release];
b.@property (nonatomic, retain) UIView *v; 或 @property (nonatomic, copy) UIView *v;声明的属性,那么这样分配内存
v = [[UIView alloc] init];
[self.view addSubview:v];
[v release];这样与a是一样情况,不需要在dealloc里释放。但如果是
self.v = [[UIView alloc] init];
[self.view addSubview:v];
[v release];加了个self,那么就要在dealloc里[v release];
IOS 非ARC开发内存管理的几条规则的更多相关文章
- iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)
手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...
- iOS 非ARC基本内存管理系列总结6 -设计微博模型
设计简单的微博模型:用User类和Status类来模拟实现 在非ARC机制下有两种方式,两者没有太大的区别之所以写了两种只是为了方便学习和对比两种写法! 第一种:没有使用atuorelease和自动释 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存
iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...
- iOS 非ARC基本内存管理系列 1-引用计数器
1.什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量 ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(2)
/* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 */ /******************* ...
- iOS 非ARC基本内存管理系列 2-多对象内存管理(1)
单个对象的内存管理非常简单无非就是alloc对应release,retain对应release.但是如果涉及到很多对象,而且对象与对象有联系的时候该怎么去管理对象的内存呢. 比如同样一本书有好3个人购 ...
- iOS 非ARC基本内存管理系列 5-autorelease方法使用总结
autorelase:可以将对象交给自动释放池中,释放池销毁的时候对里面的对象做一次release操作代码如下 @autoreleasepool { Person *person = [[[Perso ...
- iOS 非ARC基本内存管理系列 4-autorelease方法和@autoreleasepool
1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自 ...
- iOS 非ARC基本内存管理系列 3-循环retain和@class
1.@class 使用场景:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类: 可以看出Person和Card互相引用,此时如果使用#import编译报错!因此当使用@class在两个类中相 ...
随机推荐
- Windows Live Writer 2012 on .net 4
众所周知,强大的live套件不再更新,止步于2012,所以安装的时候需要.net 3.5的运行时,这很讨厌,在新系统里面是.net 4运行时的,.net运行时的设计者脑袋张虫,新的居然不默认支持旧的程 ...
- C语言初级进阶1
1.数据类型1.1.基本数据类型数据类型分2类:基本数据类型+复合类型基本类型:char short int long float double复合类型:数组 结构体 共用体 类(C语言没有类,C++ ...
- SharePoint远程发布Solution
1.在本地修改好代码,选择publish,将.wsp文件保存到本地: 2.将wsp文件上传到目标网站,停止原解决方案并删除,上传新解决方法并且激活: 停止原来的解决方案 上传解决方案 3.激活Solu ...
- [转] form.getForm().submit的用法及Ext.Ajax.request的小小区别
原文地址:http://blog.csdn.net/hongleidy5000/article/details/7329325 if (!formDetail.getForm().isValid()) ...
- BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
- 为Debian/Ubuntu的apt-get install添加自动补齐/完成功能
Debian/Ubuntu的apt-get太常用了,不过偶尔可能也会碰到不太熟悉,想不起来的包的名称,除了去debian packages去查找,另外的方法就是给Debian/Ubuntu添加自动补齐 ...
- css基于绝对定位的垂直水平居中技术
翻译:http://blog.csdn.net/freshlover/article/details/11579669 原文:http://coding.smashingmagazine.com/20 ...
- android 手机去哪儿7.2版本客户端 账号存储信息分析
1.data/data/com.qunar sharepref 文件夹下的Qunarperferences.xml文件中 username,phone等均为加密处理过字段 2.jdgui下查找关键 ...
- BZOJ3110: [Zjoi2013]K大数查询
喜闻乐见的简单树套树= =第一维按权值建树状数组,第二维按下标建动态开点线段树,修改相当于第二维区间加,查询在树状数组上二分,比一般的线段树还短= =可惜并不能跑过整体二分= =另外bzoj上的数据有 ...
- easyUi datagrid 返回时间格式化操作
1.格式化返回的时间 { field : 'endTime', title : '轮播图片循环的结束时间', width : 50, align : 'center' //格式化时间操作 format ...