I use iPhone 6 simulator in Xcode. After I add a simple UITextView in my view, I type some word in it. But I found some errors in console:
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
And when I watch the memory use ,it increase very fast.But when I use iphone5 or iphone4.3 Simulator it will not appear.
Here is my code:
#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
Your memory usage most likely isn’t “increasing like crazy”, you just happen to be looking at the total number of bytes allocated in instruments, which is meant to steadily increase. Use the actual leaks tool and it will even tell you the exact line of code the leaks occur at, and how much one particular function is contributing to the overall leakage.
As for the CG… Errors, drawing code needs to be done in a
-drawRect:override, which is the only place you can get a stable non-NULL context to draw into.