Tengo una aplicación de iPhone que recibe advertencias de memoria y por eso estoy tratando de encontrar fugas, hacer un uso más eficiente de la memoria, etc., con la ayuda de Instruments. Entre otras cosas, estoy tratando de eliminar cualquier objeto liberado automáticamente y reemplazarlo por objetos manuales alloc/init/release. Sin embargo, algunas llamadas API no parecen tener una versión 'init' (ver código a continuación). Yo ciertamente tengo algunos malentendidos básicos:Uso de fugas y objetos de instrumentos: ¿se cuentan los objetos liberados automáticamente como fugas?
Si Me llamo en 'la API y vuelva objetos esencialmente autoreleased, estos objetos pueden aparecer como fugas en los instrumentos? Parece que veo este comportamiento en los instrumentos.
Si es así a 2, ¿debería simplemente ignorar si no hay una alternativa de "no liberación automática" y estoy usando una API que necesito? Además, si este código se llama mucho, ¿debería reconsiderar por completo el algoritmo?
Aquí hay un código de utilidad de mi aplicación que se llama mucho. Básicamente determina si dos fechas son significativamente 'iguales'. Me he quedado en el código comentado para que pueda ver los tipos de mejoras que estoy buscando en mi base de código: esto redujo las fugas de memoria cuando funcioné en los instrumentos cuando comencé a crear manualmente NSDate (y lanzamiento) que ayudó. Sin embargo, todavía tengo los objetos componentes fecha que creo que se escapa ... pero es una llamada a la API (lo siento por el formato de código pero me parece que no puede mejorarlo en 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]
);*/
}
pienso los componentsFromDate y los componentsFromAnotherDate se muestran como filtraciones, pero solo hay objetos devueltos esencialmente de una llamada a la API de NSData (liberados automáticamente). No estoy seguro de qué más podría hacer realmente para que esto sea más eficiente y estoy cuestionando mi comprensión de cómo usar mejor los instrumentos. Sugerencias?
Parece que no hay forma de usar intstruments para depurar GDC. ¿Hay quizás otra forma? –