假设我的数据库管理器是单例。
+ (SWDatabaseManager *)retrieveManager
{
@synchronized(self)
{
if (!sharedSingleton)
{
sharedSingleton = [[SWDatabaseManager alloc] init];
}
return sharedSingleton;
}
}
- (NSArray *)getProductDetails:(NSString *)someString
{
NSArray *temp = [self getRowsForQuery:someString];
return temp;
}
- (NSArray *)getRowsForQuery:(NSString *)sql
{
sqlite3_stmt *statement=nil;
NSMutableArray *arrayResults = [NSMutableArray arrayWithCapacity:1];
//
//Fetching data from database and adds them in to arrayResults
//
return arrayResults;
}
现在从某个视图控制器我调用数据库管理器的功能就像这样......
[self getProductServiceDidGetDetail:[[SWDatabaseManager retrieveManager] getProductDetail: @"SomeQuery"]
- (void)getProductServiceDidGetDetail:(NSArray *)detailArray
{
[self setDataSource:[NSArray arrayWithArray:detailArray]];
[self.tableView reloadData];
}
问题是...... 什么时候getRowsForQuery的arrayResult会发布?
我是否需要为getProductServiceDidGetDetail的detailArray指定nil?
是否有任何内存泄漏?
建议将不胜感激。
答案 0 :(得分:0)
ARC执行自动内存管理。因此,当您使用它时,它会释放所有内容(您的数组)。
ARC通过在编译时添加代码来确保对象生效 只要有必要,但不再。从概念上讲,它遵循相同的原则 内存管理约定作为手动引用计数(描述 在高级内存管理编程指南)中添加 适当的内存管理需要你。
为了帮助您更好地理解,您可能希望阅读ARC上的apple文档。
您不需要为数组指定nil,也不必担心内存泄漏。
您不必(实际上不能)释放实例变量,但是您 可能需要在系统类和其他类上调用[self setDelegate:nil] 未使用ARC编译的代码。