ios - 以编程方式创建 ViewController 和可能的内存泄漏

标签 ios memory-management

我有时很难理解 iOS 的内存管理。

我接管了一些应用程序并正在开发它。应用程序是在部署目标4.3下开发的,不能根据客户的要求进行更改。

有一个创建 Picker 的方法。

NSMutableArray *arrayToLoad = [[NSMutableArray alloc] initWithObjects: obj, nil];
[arrayToLoad addObjectsFromArray: (NSMutableArray*)[valueArrays objectAtIndex: btn.tag]];
if( !picker )
{
    picker = [[WybierzZListyViewController alloc] initWithValues: arrayToLoad useObjectType: YES selectedIndex:0];
    [self.view addSubview: picker.view];
    picker.delegate = self;
    [picker animate];
}
else
{
    picker = [[WybierzZListyViewController alloc] initWithValues: arrayToLoad useObjectType: YES selectedIndex:0];
    [picker reuseWithValues: arrayToLoad useObjectType: YES selectedIndex: indexes[btn.tag]];
    [picker animate];
}

这个 else block ,尤其是方法reuseWithValues 给我带来了很多麻烦,我很可能会清除它。

前一位开发人员重用以前创建的选择器而不是重新创建新的选择器是否正确?听起来不错,但后来对我来说没什么困难,我想知道我是否可以:

picker = [[WybierzZListyViewController alloc] initWithValues: arrayToLoad useObjectType: YES selectedIndex:0];
[self.view addSubview: picker.view];
picker.delegate = self;
[picker animate];

没有else block ,并且避免内存泄漏。理论上,新的 ViewController 应该分配在 picker 变量下,但是替换一个呢?我应该在更换它之前以某种方式销毁它吗?

最佳答案

在初始化选择器时尝试这样做

    NSMutableArray *arrayToLoad = [[NSMutableArray alloc] initWithObjects: obj, nil];
        [arrayToLoad addObjectsFromArray: (NSMutableArray*)[valueArrays objectAtIndex: btn.tag]];
        if( !picker )
        {

[picker.view removeFromSuperview];
picker.delegate = nil;
picker = nil
        }
            picker = [[WybierzZListyViewController alloc] initWithValues: arrayToLoad useObjectType: YES selectedIndex:0];
            [self.view addSubview: picker.view];
            picker.delegate = self;
            [picker animate];

希望这能解决您的问题。

关于ios - 以编程方式创建 ViewController 和可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14558810/

相关文章:

ios - 使用钛合金,我正在尝试制作一个基本的 : name password and email field. 我该怎么做?

ios - 在iPad上启用iPa后,AVQueuePlayer播放流媒体,有什么建议吗?

ios - 将 .swift 文件导入 Objective-C 文件会导致方法声明错误缺少上下文

c - C什么时候释放struct的内存

boost图库内存消耗大图

ios - 使用和不使用协议(protocol)将选择器发送到 id 有什么区别?

objective-c - 如何在不阻塞UI的情况下渲染图像?

c++ - c++ 中是否有与 glibc mtrace() 函数类似的函数?

C - 计算总和并将其乘以 malloc() 中的 sizeof

快速内存管理 : Storing func in var