我在Xcode中使用iPhone 6模拟器。在我的视图中添加一个简单的UITextView后,我在其中键入了一些单词。但是我在控制台中发现了一些错误:
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSaveGState: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextDrawLinearGradient: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSaveGState: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextDrawLinearGradient: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Oct 19 10:07:14 localhost textViewTest[1438] <Error>: CGContextFillRects: invalid context 0x0
当我观看内存使用时,它会增加得非常快。但是当我使用iphone5或iphone4.3模拟器时它不会出现。
这是我的代码:
#import "ViewController.h"
#include <sys/sysctl.h>
#include <mach/mach.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UITextView *textView=[[UITextView alloc] initWithFrame:CGRectMake(0,0,320,50)];
[self.view addSubview:textView];
[textView release];
NSTimeInterval timeInterval =5.0 ;
[NSTimer scheduledTimerWithTimeInterval:timeInterval
target:self
selector:@selector(handleMaxShowTimer:)
userInfo:nil
repeats:YES];
}
- (double)availableMemory
{
vm_statistics_data_t vmStats;
mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;
kern_return_t kernReturn = host_statistics(mach_host_self(),HOST_VM_INFO,(host_info_t)&vmStats,&infoCount);
if(kernReturn != KERN_SUCCESS)
{
return NSNotFound;
}
return ((vm_page_size * vmStats.free_count) / 1024.0) / 1024.0;
}
- (double)usedMemory
{
task_basic_info_data_t taskInfo;
mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
kern_return_t kernReturn = task_info(mach_task_self(),
TASK_BASIC_INFO, (task_info_t)&taskInfo, &infoCount);
if(kernReturn != KERN_SUCCESS) {
return NSNotFound;
}
return taskInfo.resident_size / 1024.0 / 1024.0;
}
-(void)handleMaxShowTimer:(NSTimer *)theTimer
{
NSLog(@" use memory %f remain memory %f",[self usedMemory],[self availableMemory]);
}
@end
答案 0 :(得分:0)
你的内存使用率最有可能不是“疯狂增加”,你恰好正在查看仪器中分配的总字节数,这意味着要稳步增加。使用实际泄漏工具,它甚至会告诉您泄漏发生的确切代码行,以及一个特定功能对整体泄漏的影响程度。
对于CG ...错误,绘图代码需要在-drawRect:
覆盖中完成,这是唯一可以获得稳定的非NULL上下文的地方。