Objective c 此功能中的内存何时释放
我有一个视图控制器,它调用另一个nsobject文件中的函数 所以在我的主视图控制器中,我通过 [DatabaseFunctions FillArray:Array] 数组是在视图控制器中初始化的nsmutablearray 在DatabaseFunctions.h中Objective c 此功能中的内存何时释放,objective-c,memory-management,Objective C,Memory Management,我有一个视图控制器,它调用另一个nsobject文件中的函数 所以在我的主视图控制器中,我通过 [DatabaseFunctions FillArray:Array] 数组是在视图控制器中初始化的nsmutablearray 在DatabaseFunctions.h中 + (void) FillArrays : (NSMutableArray*) Array; 在DatabaseFunctions.m中 + (void) MainScreenFill : (NSMutableArray*) A
+ (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];解除分配?根据苹果公司的文档: 当保留计数变为零时,对象被解除分配(销毁)
在您描述的场景中,分配给p的任何变量都不会被释放,因为您正在将其添加到数组中。数组保留对对象的强引用,因此在该引用被破坏之前(在从数组中删除对象或数组本身被解除分配之前),它不会被解除分配。
p
被多次释放。你真的想问它什么时候会被释放吗?仅供参考-这是标准惯例,只有类名是大写字母。方法名和变量名应该以小写字母开头。是的,我的意思是解除分配,所以如果将其添加到数组中,则该数组将在视图控制器中创建。当我离开视图控制器(切换屏幕)时,它将全部删除?我有一个具有多个视图的应用程序,切换视图会导致内存泄漏,我只是想确定位置。这取决于您的视图控制器是否解除分配-如果它是导航堆栈的一部分,则旧的视图控制器在从堆栈中弹出之前不会解除分配(即,将一个推到顶部不会触发解除分配).im使用以下代码切换视图TableViewSelect*switchviews=[[TableViewSelect alloc]initWithNibName:nil bundle:nil];[self-presentViewController:switchviews动画:是完成:空];在这种情况下,“自我”将不会被解除分配。它仍然在内存中,以防显示的视图控制器被取消。那么我如何正确地执行它呢lol,浏览web链接这就是我找到的解决方案。你有没有可能发送一个链接教程或建议?