Управление памятью при использовании macruby и Objective-C - PullRequest
0 голосов
/ 06 мая 2009

У меня есть приложение macruby, которое пропускает гигабайт памяти. Ruby предназначен для логики и доступа к некоторым моим классам Objective-C, для доступа к таким функциям, как Accessibility-API, создания скриншотов и обработки их через CIImage.

Имеет код ruby ​​и Objective-C, который обрабатывает память?

Насколько я знаю, ruby ​​собирает мусор автоматически, но для Obj.-C я должен использовать немного NSAutoreleasePool. Но где я должен release бассейн? Мой код ruby ​​должен обрабатывать возвращаемые значения.

В настройках моего проекта включена сборка мусора (-fobjc-gc-only).

Вот код:

+ (CGSize) getSizeAttribute: (AXUIElementRef)element attribute:(CFStringRef) attribute {
  AXValueRef temp;  
  CGSize point;
  AXError resultCode;
  resultCode = AXUIElementCopyAttributeValue( element, attribute, (CFTypeRef *)&temp );
  AXValueGetValue(temp, kAXValueCGSizeType, &point);
  return point;
}

1 Ответ

2 голосов
/ 11 октября 2009

В вашем коде

resultCode = AXUIElementCopyAttributeValue( element, attribute, (CFTypeRef *)&temp );

температура никогда не выпускается.

Вы должны добавить:

CFMakeCollectable(temp)

Приложения MacRuby по умолчанию запускаются в режиме GC, но управление памятью CF / Obj-C может быть немного сложным (за пределами MacRuby), проверьте документацию Apple, доступную на их сайте разработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...