iOS開發那些事-響應記憶體警告
好的應用應該在系統記憶體警告情況下釋放一些可以重新建立的資源。在iOS中我們可以在應用程式委託物件、檢視控制器以及其它類中獲得系統記憶體警告訊息。
1、應用程式委託物件
在應用程式委託物件中接收記憶體警告訊息,需要重寫applicationDidReceiveMemoryWarning:方法。AppDelegate的程式碼片段:
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@”AppDelegate中呼叫applicationDidReceiveMemoryWarning:”);
}
2、檢視控制器
在檢視控制器中接收記憶體警告訊息,需要重寫didReceiveMemoryWarning方法。ViewController的程式碼片段:
- (void)didReceiveMemoryWarning
{
NSLog(@”ViewController中didReceiveMemoryWarning呼叫”);
[super didReceiveMemoryWarning];
//釋放成員變數
[_listTeams release];
}
注意釋放資原始碼應該放在[super didReceiveMemoryWarning]語句下面。
3、其它類
在其它類中可以使用通知,在記憶體警告時候iOS系統會發出UIApplicationDidReceiveMemoryWarningNotification通知,凡是在通知中心註冊了UIApplicationDidReceiveMemoryWarningNotification通知的類都會接收到記憶體警告通知。ViewController的程式碼片段:
- (void)viewDidLoad
{
[super viewDidLoad];
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"team"
ofType:@"plist"];
//獲取屬性列表檔案中的全部資料
NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];
self.listTeams = array;
[array release];
//接收記憶體警告通知,呼叫handleMemoryWarning方法處理
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
selector:@selector(handleMemoryWarning)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
}
//處理記憶體警告
-(void) handleMemoryWarning
{
NSLog(@”ViewController中handleMemoryWarning呼叫“);
}
我們在viewDidLoad方法中註冊UIApplicationDidReceiveMemoryWarningNotification訊息,接收到報警資訊呼叫handleMemoryWarning方法。這些程式碼完全可以寫在其它類中,在ViewController中重寫didReceiveMemoryWarning方法就可以了,本例這是示意性介紹一下UIApplicationDidReceiveMemoryWarningNotification報警訊息。
記憶體警告在裝置上出現並不是經常的,一般我們沒有辦法模擬,但模擬器上有一個功能可以模擬記憶體警告,啟動模擬器,選擇模擬器選單硬體→模擬記憶體警告,這個時候我們會在輸出視窗中看到記憶體警告發生了。
2012-11-06 16:49:16.419 RespondMemoryWarningSample[38236:c07] Received memory warning.
2012-11-06 16:49:16.422 RespondMemoryWarningSample[38236:c07] AppDelegate中呼叫applicationDidReceiveMemoryWarning:
2012-11-06 16:49:16.422 RespondMemoryWarningSample[38236:c07] ViewController中handleMemoryWarning呼叫
2012-11-06 16:49:16.423 RespondMemoryWarningSample[38236:c07] ViewController中didReceiveMemoryWarning呼叫
相關文章
- JVM 記憶體的那些事JVM記憶體
- JVM記憶體的那些事JVM記憶體
- iOS記憶體管理的那些事兒-原理及實現iOS記憶體
- iOS開發筆記(一):記憶體管理iOS筆記記憶體
- iOS開發-響應鏈iOS
- iOS開發之記憶體與快取iOS記憶體快取
- iOS開發-屬性的記憶體管理iOS記憶體
- iOS開發ARC記憶體管理技術要點iOS記憶體
- iOS開發系列—Objective-C之記憶體管理iOSObject記憶體
- Clojure 開發那些事
- 低記憶體(256MB)應用開發說明及注意事項薦記憶體
- GC那些事兒–Android記憶體優化第一彈GCAndroid記憶體優化
- 聊聊記憶體那些事(基於微控制器系統)記憶體
- GC那些事兒--Android記憶體優化第一彈GCAndroid記憶體優化
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- ios 面試那些事iOS面試
- 敏捷開發的那些事敏捷
- iOS 記憶體管理iOS記憶體
- 軟體工程—思考專案開發那些事(一)軟體工程
- iOS開發那些事-效能優化–autorelease的使用問題iOS優化
- iOS CollectionView 的那些事iOSView
- iOS開發的那些坑iOS
- iOS開發那些事-Git在Xcode中的配置與使用iOSGitXCode
- web前端開發框架那些事Web前端框架
- “理解”iOS記憶體管理iOS記憶體
- iOS 記憶體管理MRCiOS記憶體
- iOS 記憶體管理研究iOS記憶體
- 探索iOS記憶體分配iOS記憶體
- iOS記憶體淺談iOS記憶體
- iOS arc 記憶體管理iOS記憶體
- QLC快閃記憶體能用嗎?聊聊關於固態硬碟的那些事記憶體硬碟
- iOS App 開發的那些事兒 2:如何搭建合適的框架iOSAPP框架
- iOS開發的那些坑(貳)iOS
- iOS 本地通知那些事iOS
- iOS 進階—— iOS 記憶體管理 & BlockiOS記憶體BloC
- 淺談Blazor開發的那些事Blazor
- JavaScript模組化開發的那些事JavaScript
- iOS微信記憶體監控iOS記憶體