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];
最新文章
- 关于调整input里面的输入光标大小
- SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
- c语言多线程队列读写
- Loadrunner中web_reg_save_param的使用详解
- C++内存泄露调试
- SCU 4436 Easy Math 2015年四川省赛题
- sql从某不连续的数字中将其分段并找出缺失的数字并分段
- Node.js与MongoDB的基本连接示例
- HTML特殊符号、常用字符实体
- U盘重装Win10系统视频教程
- lambda+mutable配合move实现单函数多程序域
- mint17上建立lamp环境
- [物理学与PDEs]第2章习题5 正应力的平均值
- Python学习笔记五
- 一个电脑的重装到java开发环境安装配置的全过程
- html 空白汉字占位符&;#12288;
- Codeforces 955C Sad powers (数论)
- golang的sort研究
- sql server自增列值的获取
- javascript--给你的JS代码添加单元测试