У меня есть приложение для iPhone, которое получает предупреждения о памяти, поэтому я пытаюсь найти утечки, более эффективно использовать память и т. Д. С помощью инструментов. Помимо всего прочего, я пытаюсь вытащить любые объекты с автореализацией и заменить на ручные объекты alloc/init/release. Однако некоторые вызовы API не имеют версии «init» (см. Код ниже). Я правда есть некоторые основные недопонимания:Использование инструментов Утечки и объект Alloc: Являются ли автореализованные объекты подсчитаны как утечки?
Если я называю в "по API и получить обратно по существу autoreleased объекты, могут ли эти объекты отображаются как течи инструменты? Кажется, что я вижу это поведение в Инструментах.
Если да, то 2, следует ли игнорировать, если нет альтернативы «без авторекламы», и я использую API, который мне нужен? Кроме того, если этот код получает много имен, должен ли я полностью переосмыслить алгоритм?
Вот какой код полезности из моего приложения, получившего много имен. В основном определяет, являются ли две даты значимо «равными». Я оставил в коде с комментариями, чтобы вы могли видеть типы улучшений, которые я буду делать в своей кодовой базе. этот DID уменьшает утечки памяти при последующем запуске в Инструментах, когда я начал вручную создавать NSDate (и выпускать), которые помогли. Тем не менее, я до сих пор объекты дата компонентов, которые я считаю протечка ... но это API вызова (извините за код форматирования, но я не могу показаться, чтобы улучшить его на SO):
+ (BOOL)isDayEqualToDay:(NSDate*)date anotherDate:(NSDate*)anotherDate
{
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
//NSCalendar *cal;
NSDateComponents *componentsFromDate, *componentsFromAnotherDate;
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
//cal = [NSCalendar currentCalendar];
componentsFromDate = [cal components:unitFlags fromDate:date];
componentsFromAnotherDate = [cal components:unitFlags fromDate:anotherDate];
BOOL bDatesEqual = ([componentsFromDate year] == [componentsFromAnotherDate year] &&
[componentsFromDate month] == [componentsFromAnotherDate month] &&
[componentsFromDate day] == [componentsFromAnotherDate day]);
[cal release];
return bDatesEqual;
/*
return (
[componentsFromDate year] == [componentsFromAnotherDate year] &&
[componentsFromDate month] == [componentsFromAnotherDate month] &&
[componentsFromDate day] == [componentsFromAnotherDate day]
);*/
}
Я думаю, компонентыFromDate и componentsFromAnotherDate отображаются как утечки, но есть только объекты, по существу возвращенные из вызова API NSData (autoreleased). Не уверен, что еще я мог сделать, чтобы сделать это более эффективным, и я задаю себе вопрос о том, как лучше всего использовать инструменты. Предложения?
Кажется, что нет возможности использовать инструменты для отладки GDC. Может быть, другой способ? –