Я недавно переключился с использования NSTimer на CVDisplayLink, чтобы перерисовать мою анимацию OpenGL, но у меня возникла небольшая проблема с тем, чтобы она работала с включенным ARC:
/*
* This is the renderer output callback function.
*/
static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
// now is the time to render the scene
[((__bridge BDOpenGLView*)displayLinkContext) setNeedsDisplay:YES];
// always succeeds, because we don't actually do anything here anyway
return kCVReturnSuccess;
}
Функция обратного вызова для отображения ссылки должна бытьнаписанный на C, который будет использоваться в качестве параметра для
// set the renderer output callback function
CVDisplayLinkSetOutputCallback(displayLink, &displayLinkCallback, (__bridge void*)self);
Так что я не могу использовать self
в обратном вызове, но использование ((__bridge BDOpenGLView*) displayLinkContext)
приводит к утечке памяти:
objc[29390]: Object 0x1001b01f0 of class NSConcreteMapTable autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Я прочитал, что мне нужно настроить NSAutoreleasePool
самостоятельно, но я не могу с включенным ARC.
Я что-то упустил?