在ARC中自动释放对象

时间:2013-09-03 17:05:19

标签: ios objective-c singleton automatic-ref-counting autorelease

假设我的数据库管理器是单例。

+ (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?

是否有任何内存泄漏?

建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

ARC执行自动内存管理。因此,当您使用它时,它会释放所有内容(您的数组)。

  

ARC通过在编译时添加代码来确保对象生效   只要有必要,但不再。从概念上讲,它遵循相同的原则   内存管理约定作为手动引用计数(描述   在高级内存管理编程指南)中添加   适当的内存管理需要你。

为了帮助您更好地理解,您可能希望阅读ARC上的apple文档。

您不需要为数组指定nil,也不必担心内存泄漏。

  

您不必(实际上不能)释放实例变量,但是您   可能需要在系统类和其他类上调用[self setDelegate:nil]   未使用ARC编译的代码。