内存管理在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];
待续......