1

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

+ (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 何时发布?

我需要将 nil 分配给 getProductServiceDidGetDetail 的 detailArray 吗?

有没有内存泄漏?

建议将不胜感激。

4

1 回答 1

0

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

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

为了帮助您更好地理解,您可能需要阅读ARC上的 apples 文档。

您无需将 nil 分配给数组,也不必担心内存泄漏。

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

于 2013-09-03T17:08:04.677 回答