Учитывая следующий фрагмент кода внутри метода;
NSBezierPath * tempPath = [NSBezierPath bezierPathWithOvalInRect:pathRect];
[tempPath retain];
[path release];
[self setPath:tempPath];
Я несу ответственность за выпуск tempPath
или это будет сделано для меня?
setPath равен @synthesize
d, поэтому я, вероятно, смогу также пропустить [path release]
?
Я знаю, что лучший способ сделать это просто;
[path appendBezierPathWithOvalInRect:pathRect];
Но, будучи новичком в Objective C и Cocoa, я пытаюсь понять, как все складывается вместе.
--- ДОБАВЛЕННОЕ СОДЕРЖАНИЕ
Отсутствие [tempPath retain]
приводит к сбою в объекте NSView
, который использует пути.
Результат отладчика:
(gdb) po [0x145dc0 path]
Program received signal EXC_BAD_ACCESS, Could not access
память.
Причина: KERN_PROTECTION_FAILURE по адресу: 0x00000021
0x93c56688 в objc_msgSend ()
КОНФЕССИЯ ВИН - моя ошибка. Надеюсь, кто-то еще получит что-то полезное от моей ошибки. Я использовал assign
вместо retain
в объявлении @property
. Исправление заставило код работать должным образом.
СПАСИБО ЗА ПОМОЩЬ ПАРНИМ