我有一个视图控制器,它在另一个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];解除分配的?
答案 0 :(得分:2)
根据Apple关于Memory Management的文档:
当保留计数变为零时,对象将被释放(销毁)。
在您描述的场景中,分配给P的任何变量都不会被释放,因为您要将其添加到阵列中。该数组维护对您的对象的强引用,因此在该引用被破坏之前不会被释放(直到您从该数组中删除该对象,或者该数组本身被释放)。