我有一个iPhone应用程序正在获取内存警告,所以我试图在仪器的帮助下找到泄漏,更有效地使用内存等.除此之外,我正在尝试取出任何自动释放的对象并替换为手动alloc/init/release对象.但是,某些API调用似乎没有"init"版本(请参阅下面的代码).我承认有一些基本的误解:
如果我'调用'API并返回基本上自动释放的对象,那么这些对象是否会在仪器中显示为泄漏?我似乎在仪器中看到了这种行为.
如果是2,我应该忽略,如果没有"非自动释放"替代方案,我正在使用我需要的API吗?此外,如果这个代码被调用很多,我应该完全重新考虑algor吗?
这是我的应用程序中的一些实用程序代码,它被调用很多.基本上确定两个日期是否有意义"相等".我已经留下了注释掉的代码,这样你就可以看到我在我的代码库中要进行的改进类型 - 当我开始手动创建NSDate(和发布)时,这个DID减少了随后在Instruments中运行时的内存泄漏帮助.但是,我仍然有我相信泄漏的日期组件对象...但它是一个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] );*/ }
我认为componentsFromDate和componentsFromAnotherDate显示为泄漏,但实际上只有从NSData API调用(自动释放)返回的对象.不知道我还能做些什么来提高效率,而且我质疑我对如何最好地使用乐器的理解.建议?