何时在此功能中释放内存

时间:2014-04-11 18:24:11

标签: objective-c memory-management

我有一个视图控制器,它在另一个nsobject文件中调用一个函数。

所以在我的主视图控制器中,我通过

调用一个函数

[DatabaseFunctions FillArrays:Array];

Array是在视图控制器中初始化的nsmutablearray。

在DatabaseFunctions.h

+ (void) FillArrays : (NSMutableArray*) Array;

和DatabaseFunctions.m

+ (void) MainScreenFill : (NSMutableArray*) Array{
    sqlite3_stmt *statement;

    if (sqlite3_open([dbDatabasePath UTF8String], &TableDB)==SQLITE_OK) {
        [Array removeAllObjects];

        NSString *querySql = [NSString stringWithFormat:@"SELECT VARIABLE, VARIABLE1, VARIABLE2, VARIABLE3 FROM TABLE];
        const char* query_sql = [querySql UTF8String];

        if (sqlite3_prepare(TableDB, query_sql, -1, &statement, NULL)==SQLITE_OK) {
            while (sqlite3_step(statement)==SQLITE_ROW)
            {
                MainTableView *P = [[MainTableView alloc]init];
                [P setFirstname:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(statement, 0)]];
                [P setSecondname:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(statement, 1)]];
                [P setClass:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(statement, 2)]];

                [Array addObject:P];
            }
        }
    }
    sqlite3_close(TableDB);
}

我的问题是什么时候内存分配MainTableView * P = [[MainTableView alloc] init];解除分配的?

1 个答案:

答案 0 :(得分:2)

根据Apple关于Memory Management的文档:

  

当保留计数变为零时,对象将被释放(销毁)。

在您描述的场景中,分配给P的任何变量都不会被释放,因为您要将其添加到阵列中。该数组维护对您的对象的强引用,因此在该引用被破坏之前不会被释放(直到您从该数组中删除该对象,或者该数组本身被释放)。