Благодарю hotpaw2 за решение моей проблемы с инкрементным рисованием.Увы, я обнаружил проблему с решением при его реализации.Он проявляется как сбой, вызванный памятью, когда я нажимаю на нижнюю часть iphone, чтобы приостановить приложение, а затем перезапустить его.(Я могу запускать приложение до бесконечности, пока я этого не сделаю).Сбой происходит в указанной ниже строке, которая происходит в FooBar, подклассе UIView:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
// @@CRASH here: Program received signal EXC_BAD_ACCESS
[backingLayer renderInContext:ctx]; // Render the backing layer into current context
[self randomRectangle: ctx];
}
В интерфейсе FooBar я объявил резервный слой как переменную экземпляра:
@private
NSTimer* timer;
CALayer *backingLayer;
В реализации FooBar backingLayer встречается еще раз, в initWithFrame
, в следующем абзаце:
backingLayer = self.layer;
// [backingLayer retain];
// Set its color space and background color
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat components[4] = {0.0f, 0.0f, 0.0f, 1.0f};
CGColorRef bgColor = CGColorCreate(colorSpace, components);
backingLayer.backgroundColor = bgColor;
CGColorRelease(bgColor);
CGColorSpaceRelease(colorSpace);
Я также должен сказать, что существует NSTimer timer
, который определен в initWithFrame
метод tick
запускается ниже 12 раз в секунду:
- (void)tick
{
// Tell the view that it needs to re-draw itself
if (running) { // Go!
// NSLog(@"frameRate: %2.1f, frameCount: %d", frameRate, frameCount);
[self setNeedsDisplay];
frameCount++;
}
}
Я запускаю инструменты в этом приложении.Утечки памяти не обнаружены.Но когда я запускаю Allocations и (a) приостанавливаю приложение с помощью физической кнопки, (b) коснитесь значка приложения, чтобы он снова запустился, тогда я вижу огромный кластер выделений (~ 2 ГБ) --- и CRASH.
- Джим