0

我有时无法理解 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 块,尤其是方法 reuseWithValues 给我带来了很多麻烦,我很可能会把它清除掉。

以前的开发人员关于重用以前创建的选择器而不是重新创建新的选择器是否正确?听起来很合理,但后来对我来说几乎没有什么困难,我想知道我是否可以:

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

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

4

1 回答 1

1

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

    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];

希望这能解决您的问题。

于 2013-01-28T09:21:05.043 回答