IOS中内存采用引用计数的方式,在释放内存编程时采用约定的方式,在这里不长篇大论具体内存的原理,只从实用角度出发记录下如何根据这些约定来释放内存。

具体约定为:

当你使用new、alloc、copy 开头的方法名创建对象后,当不需要此对象时,需要通过调用这个对象的release方法来减少引用计数;retain对象之后也需要调用release方法来减少引用计数。

其它方法创建的对象都不需要调用release方法来释放对象。

只要记住这条约定,编程中80%的内存管理都不需要再考虑是否需要release还是不需要了。

当你自己的方法中不是以new、alloc 或 copy 开头的方法名创建对象时,可以使用 autolease返回对象,这样调用者就不需要释放对象了。

在程序中跟内存相关的需要注意的地方为:

  • 变量声明
@property (nonatomic, retain) UILabel* label;

@property (nonatomic, assign) NSInteger intValue;

@synthesize label = _label;

其中对于对象类型使用了retain,这样这个对象就需要被release,release的地方为dealloc方法内。

对于基本数据类型,使用了assign,也就是直接赋值方式就可以,不存在对象引用计数这种问题,因此也就不需要release。

在合成方法时,这里采用了一个变量名约定,也就是_变量名,这样带下划线的变量就是内部变量,而没有下划线的其实就是属性名,这样真正的内部变量其实是带下划线的那个名字,因此在释放内存时就要使用_变量名.release方法。

  • viewDidUnload方法
- (void)viewDidUnload

{

self.label = nil;

[super viewDidUnload];

}

这里主要是对retain修饰的属性进行释放,只要把相关属性设置为nil就可以,(主要原因是在生成设置属性的代码中就有对原有对象的释放)

  • dealloc方法
- (void)dealloc

{

[_label release];

[super dealloc];

}

最新文章

  1. 没有为扩展名“.html”注册的生成提供程序
  2. Spring Bean后处理器以及容器后处理器【转】
  3. js多个输入框运算计算结果输出到另一个输入框
  4. OAuth2授权原理
  5. ubuntu安装php常见错误集锦
  6. 【Java数据格式化】使用DecimalFormat 对Float和double进行格式化
  7. google和ebay微服务经验
  8. matlab封装DLL混合编程总结
  9. Linux下ps命令
  10. mysql主从复制-linux版本
  11. Rails3.2.3+ruby1.9.3 环境搭建,提示安全警告
  12. Redis深入学习(1)前言&Redis简介
  13. rsync使用指南
  14. curl continue
  15. CSS中的剪裁和遮罩
  16. QT调用百度语音REST API实现语音合成
  17. electron + vue 实践项目
  18. java 中二维数组的定义和遍历
  19. JAVA多线程Thread VS Runnable详解
  20. hdu 4747 Mex (2013 ACM/ICPC Asia Regional Hangzhou Online)

热门文章

  1. 防火墙iptables的简单使用
  2. matlab积分使用
  3. jmeter4.0的汉化
  4. Go append 省略号
  5. Codeforces 1117G Recursive Queries [线段树]
  6. 死磕安卓前序:MVP架构探究之旅—基础篇
  7. Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
  8. 高性能JavaScript读后感
  9. Java编写一个随机产生小学生四则运算题30道
  10. 【linux】环境变量配置