我有时很难理解 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/