imageWithCGImage и память

Я заметил, что много программистов видит значение тестирования на рациональном уровне. Если Вы услышали вещи как "да, я знаю, что должен протестировать это, но я действительно должен был сделать это быстро", тогда Вы знаете то, что я имею в виду. Однако на эмоциональном уровне они чувствуют, что получают что-то сделанное только, когда они пишут реальный код.

цель, тогда, должна быть, чтобы так или иначе заставить их понимать, что тестирование на самом деле [только 114] способ иметь размеры, когда что-то "сделано", и таким образом дайте им внутреннюю мотивацию тестам записи.

я боюсь, что это намного более твердо, чем это должно быть, все же. Вы услышите много об оправданиях вроде, "я спешу, я перепишу/осуществлю рефакторинг это позже и затем добавлю тесты" - и конечно, продолжения никогда не происходит, потому что, удивительно, они столь же заняты на следующей неделе .

17
задан Adam Ernst 9 September 2009 в 21:16
поделиться

5 ответов

Я согласен с вами - документация по этому API в лучшем случае запутана. Основываясь на вашем опыте, я бы сделал вывод, что вы несете ответственность за время жизни обоих объектов - UIImage и CGImageRef . Вдобавок вы должны убедиться, что время жизни CGImageRef не меньше, чем UIImage (по понятным причинам).

0
ответ дан 30 November 2019 в 14:21
поделиться

Are you using Xcode 3.1 on Snow Leopard? I am experiencing the same issue:

CGContextRef ctx = ...;
CGImageRef cgImage = CGBitmapContextCreateImage(ctx);
UIImage * newImage = [[UIImage imageWithCGImage:cgImage] retain];

CGImageRelease(cgImage); // this should be OK, but it now crashes in Simulator on SL

I'm guessing that upgrading to Xcode 3.2 will fix the issue.

0
ответ дан 30 November 2019 в 14:21
поделиться

У меня такая же проблема в XCode 3.2.1 на Snow Leopard. У меня почти такой же код, как у Джейсона.

Я просмотрел пример кода iPhone, в котором используется imageWithCGImage , и они всегда выпускают CGImageRef с помощью CGImageRelease после вызова imageWithCGImage .

Так это ошибка симулятора? Я всегда получаю предупреждение malloc_error_break на консоли, когда использую CGImageRelease .

4
ответ дан 30 November 2019 в 14:21
поделиться

Согласно фундаментальному правилу управления памятью Какао , объект-владелец должен освободить принадлежащий объект, когда он больше не нужен. Другие объекты несут ответственность за получение и передачу права собственности по своему усмотрению. Если UIImage требует, чтобы объект сохранялся, но не сохраняет и не копирует его, это ошибка в реализации UIImage , и о ней следует сообщать как таковую.

8
ответ дан 30 November 2019 в 14:21
поделиться

<> Это не мое мнение. У меня была такая же проблема. Согласно документации

UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];

имхо все ссылки корректны. Если вы используете CGDataProvider, пожалуйста, взгляните на CGDataProviderReleaseDataCallback и установите точку останова в вашем обратном вызове. Вы можете увидеть, что он корректно вызывается после того, как вы [освободите] ваше изображение, и вы можете освободить() ваш буфер данных изображения там.

0
ответ дан 30 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: