iphone内存管理(一)
2015-09-01 10:56
274 查看
内存管理在iphone中一直是一个热点话题。通过一段时间的总结我准备与大家分享一下我对内存管理的一点认识和经验.
开始之前先给大家分享一些重要的信息
1。Iphone 3g有128M的内存。但是至少有一半已经用来运行OS了。这意味着你的程序可能只有区区40M的空间让你使用。但是请记住:你可能会在你程序只使用了3M时就收到一个内存警告.
2。iphone并不使用类似C#的垃圾回收机制,
3。内存管理的基本原则:每一个 alloc,retain,copy你都需要自己去release
4。Objective-C runtime实例化一个对象只会在栈上而不会在堆上。
5。你可以使用autorelease对象,但是要注意的是这种对象如果不将它的内存池release它是不会释放掉的.它可能造成一个很大的内存泄露。但是你用leak又查不出来。
6。iphone没有交换文件系统,所以也就没有虚拟内存.
下面是一些建议
1.回应内存警告
2.尽量避免使用autorelease
3.使用延迟加载和再利用
4.如果图大且同一张图使用次数不多就避免使用imageNamed
5.table cell妥善使用再利用机制
6.使用Instruments
7.使用静态分析工具
8.使用NSZombieEnabled检测错误详情
以下我将对上面的建议意义详细讲述
(1)回应内存警告
千万不要忘了调用如下代码,这是最简单的形式。如果你有其他需要释放内存的地方你可以写在里面.
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
而最好最后能通知到application delegate中。然后调用如下
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
[[ImageCache sharedImageCache] removeAllImagesInMemory];
}
这样可以清除缓存的图片。得以缓解紧张的内存使用情况.
当然,你需要调用如下代码来申请这个通知
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
selector:@selector(whatever:)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
待续......
开始之前先给大家分享一些重要的信息
1。Iphone 3g有128M的内存。但是至少有一半已经用来运行OS了。这意味着你的程序可能只有区区40M的空间让你使用。但是请记住:你可能会在你程序只使用了3M时就收到一个内存警告.
2。iphone并不使用类似C#的垃圾回收机制,
3。内存管理的基本原则:每一个 alloc,retain,copy你都需要自己去release
4。Objective-C runtime实例化一个对象只会在栈上而不会在堆上。
5。你可以使用autorelease对象,但是要注意的是这种对象如果不将它的内存池release它是不会释放掉的.它可能造成一个很大的内存泄露。但是你用leak又查不出来。
6。iphone没有交换文件系统,所以也就没有虚拟内存.
下面是一些建议
1.回应内存警告
2.尽量避免使用autorelease
3.使用延迟加载和再利用
4.如果图大且同一张图使用次数不多就避免使用imageNamed
5.table cell妥善使用再利用机制
6.使用Instruments
7.使用静态分析工具
8.使用NSZombieEnabled检测错误详情
以下我将对上面的建议意义详细讲述
(1)回应内存警告
千万不要忘了调用如下代码,这是最简单的形式。如果你有其他需要释放内存的地方你可以写在里面.
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
而最好最后能通知到application delegate中。然后调用如下
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
[[ImageCache sharedImageCache] removeAllImagesInMemory];
}
这样可以清除缓存的图片。得以缓解紧张的内存使用情况.
当然,你需要调用如下代码来申请这个通知
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
selector:@selector(whatever:)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
待续......
相关文章推荐
- 用Mysql GUI tool 链接 Mysql 错误 2003 的解决办法
- js实现黑客帝国二进制雨
- Centos6.6 ks
- 写入数据至历史库
- Word Ladder II 相邻字符串接龙 BFS
- SVN服务器端配置
- git: git使用存在的错误解决办法
- hdu 1106 - 排序(解题报告)
- Java 多线程 synchronized同步
- 迭代 迭代语句 迭代器 迭代模式
- iOS开发:仿网易新闻首页多频道视图切换
- 【转】python import的用法
- Java并发编程(二) 创建线程安全的类
- [LeetCode]:237:Delete Node in a Linked List
- 99乘法表
- 线段树 查询删除 后序遍历 POJ2182 Lost Cows解题报告
- 磁盘分区
- python dom解析API目录
- kickstart 自动化部署服务器端环境安装脚本
- linux命令基础(3)