утечка iphone - UIColor ... нужно освободить объект? - PullRequest
5 голосов
/ 06 октября 2010

У меня в приложении куча таких строк

UIColor *myColor = [UIColor colorWithRed:corR green:corG blue:corB alpha:1.0];

Инструменты говорят, что эти линии протекают. Поскольку это не формально, насколько я вижу, операция alloc (не так ли?) Я не видел необходимости освобождать объект, но поскольку инструменты жалуются, я добавил несколько строк как

[myColor release]

после использования переменной, чтобы угодить зверю.

Будут ли у меня проблемы с этим, например, сбои или что-то?

Видимо, это решает проблему, но мне неудобно освобождать объект, который не был выделен.

Что вы думаете?

спасибо.


E D I T

Полагаю, это проблема xcode или утечка фреймворка. Чтобы доказать, что я заменяю строки на

UIColor *myColor = [[UIColor alloc] initWithRed:corR green:corG blue:corB alpha:1.0];

и тогда объект может быть благополучно освобожден ...

сделав это, решил проблему.

Ответы [ 3 ]

9 голосов
/ 06 октября 2010

Не отпускайте объект, вы не владеете им, и в конечном итоге вы получите сбой.UIColor, вероятно, просто кеширует эти цвета для вас, и у Instruments нет возможности узнать об этом, поэтому он сообщает о них как об утечках (в основном вещи, которые были созданы, и у вас нет ссылки на них, но они не были освобождены).

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

2 голосов
/ 06 октября 2010

Если это все, что вы делаете, myColor определенно не протекает.Если вы сохраняете этот объект где-либо еще, не освобождая его, он протекает.

Никогда не отпускайте объект, который вы не помните, сохранив. Evvarrrrrrrrr .Но я подозреваю, что вы просто его где-то храните и даже не замечаете.

1 голос
/ 06 октября 2010

Иногда симулятор может сообщать об утечках, когда их нет, также убедитесь, что на устройстве есть такая же утечка ...

Но так как с симулятором работать быстрее, попробуйте сначала найти что-то там.

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