Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 此功能中的内存何时释放_Objective C_Memory Management - Fatal编程技术网

Objective c 此功能中的内存何时释放

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

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

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

[DatabaseFunctions FillArray: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];解除分配?

根据苹果公司的文档:

当保留计数变为零时,对象被解除分配(销毁)


在您描述的场景中,分配给p的任何变量都不会被释放,因为您正在将其添加到数组中。数组保留对对象的强引用,因此在该引用被破坏之前(在从数组中删除对象或数组本身被解除分配之前),它不会被解除分配。

p
被多次释放。你真的想问它什么时候会被释放吗?仅供参考-这是标准惯例,只有类名是大写字母。方法名和变量名应该以小写字母开头。是的,我的意思是解除分配,所以如果将其添加到数组中,则该数组将在视图控制器中创建。当我离开视图控制器(切换屏幕)时,它将全部删除?我有一个具有多个视图的应用程序,切换视图会导致内存泄漏,我只是想确定位置。这取决于您的视图控制器是否解除分配-如果它是导航堆栈的一部分,则旧的视图控制器在从堆栈中弹出之前不会解除分配(即,将一个推到顶部不会触发解除分配).im使用以下代码切换视图TableViewSelect*switchviews=[[TableViewSelect alloc]initWithNibName:nil bundle:nil];[self-presentViewController:switchviews动画:是完成:空];在这种情况下,“自我”将不会被解除分配。它仍然在内存中,以防显示的视图控制器被取消。那么我如何正确地执行它呢lol,浏览web链接这就是我找到的解决方案。你有没有可能发送一个链接教程或建议?