iOS开发中怎么响应内存警告
好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在iOS中我们可以在应用程序委托对象、视图控制器以及其它类中获得系统内存警告消息。
1、应用程序委托对象
在应用程序委托对象中接收内存警告消息,需要重写applicationDidReceiveMemoryWarning:方法。AppDelegate的代码片段:
-(void)applicationDidReceiveMemoryWarning:(UIApplication*)application
{
NSLog(@”AppDelegate中调用applicationDidReceiveMemoryWarning:”);
}
2、视图控制器
在视图控制器中接收内存警告消息,需要重写didReceiveMemoryWarning方法。ViewController的代码片段:
-(void)didReceiveMemoryWarning
{
NSLog(@”ViewController中didReceiveMemoryWarning调用”);
[superdidReceiveMemoryWarning];
//释放成员变量
[_listTeamsrelease];
}
注意释放资源代码应该放在[superdidReceiveMemoryWarning]语句下面。
3、其它类
在其它类中可以使用通知,在内存警告时候iOS系统会发出UIApplicationDidReceiveMemoryWarningNotification通知,凡是在通知中心注册了UIApplicationDidReceiveMemoryWarningNotification通知的类都会接收到内存警告通知。ViewController的代码片段:
-(void)viewDidLoad
{
[superviewDidLoad];
NSBundle*bundle=[NSBundlemainBundle];
NSString*plistPath=[bundlepathForResource:@"team"
ofType:@"plist"];
//获取属性列表文件中的全部数据
NSArray*array=[[NSArrayalloc]initWithContentsOfFile:plistPath];
self.listTeams=array;
[arrayrelease];
//接收内存警告通知,调用handleMemoryWarning方法处理
NSNotificationCenter*center=[NSNotificationCenterdefaultCenter];
[centeraddObserver:self
selector:@selector(handleMemoryWarning)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
}
//处理内存警告
-(void)handleMemoryWarning
{
NSLog(@”ViewController中handleMemoryWarning调用“);
}
我们在viewDidLoad方法中注册UIApplicationDidReceiveMemoryWarningNotification消息,接收到报警信息调用handleMemoryWarning方法。这些代码完全可以写在其它类中,在ViewController中重写didReceiveMemoryWarning方法就可以了,本例这是示意性介绍一下UIApplicationDidReceiveMemoryWarningNotification报警消息。
内存警告在设备上出现并不是经常的,一般我们没有办法模拟,但模拟器上有一个功能可以模拟内存警告,启动模拟器,选择模拟器菜单硬件→模拟内存警告,这个时候我们会在输出窗口中看到内存警告发生了。
2012-11-0616:49:16.419RespondMemoryWarningSample[38236:c07]Receivedmemorywarning.
2012-11-0616:49:16.422RespondMemoryWarningSample[38236:c07]AppDelegate中调用applicationDidReceiveMemoryWarning:
2012-11-0616:49:16.422RespondMemoryWarningSample[38236:c07]ViewController中handleMemoryWarning调用
2012-11-0616:49:16.423RespondMemoryWarningSample[38236:c07]ViewController中didReceiveMemoryWarning调用
原文:http://www.cr173.com/html/19264_1.html