残りメモリ容量表示
メモリ使用状況はInstrumentsでチェックすることができますが、処理が重く、またiPhoneデバイス単体でのテストが行えません。そこで、残りメモリ容量を画面に表示させるクラスを作りました。UILabelなどを使って画面の空きスペースに表示させることができます。
.hファイル
#import <Foundation/Foundation.h>
@interface MemMonitor : NSObject
@property (nonatomic, readonly) long freeMemory;
@property (nonatomic, readonly) NSString *freeMemoryAsFormattedString;
@end
.mファイル
#import "MemMonitor.h"
#import <mach/mach.h>
#import <mach/mach_host.h>
@implementation MemMonitor
{
mach_msg_type_number_t vm_info_count;
mach_port_t mach_port;
vm_size_t pagesize;
NSNumberFormatter *formatter;
}
//初期化
- (id)init
{
self = [super init];
if (self) {
vm_info_count = HOST_VM_INFO_COUNT;
mach_port = mach_host_self();
host_page_size(mach_port, &pagesize);
formatter = [[NSNumberFormatter alloc] init];
[formatter setPositiveFormat:@"#,##0"];
}
return self;
}
//メモリ残り容量をlongで返す。
- (long)freeMemory
{
struct vm_statistics vm_stat;
kern_return_t ret = host_statistics(mach_port, HOST_VM_INFO, (host_info_t)&vm_stat ,&vm_info_count);
if (ret == KERN_SUCCESS) {
return (NSInteger)vm_stat.free_count * pagesize;
} else {
return -1;
}
}
//メモリ残り容量を3桁カンマ区切りでフォーマットしたNSStringで返す。
- (NSString *)freeMemoryAsFormattedString
{
NSNumber *num = [NSNumber numberWithInteger:self.freeMemory];
return [formatter stringFromNumber:num];
}
@end
使用例:
UILabel *memMonitorLabel;
MemMonitor *memMonitor = [[MemMonitor alloc] init];
memMonitorLabel.text = [memMonitor freeMemoryAsFormattedString];
0 件のコメント:
コメントを投稿