iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 如何修复内存泄漏?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在进行长轮廓测试后,我发现在我的一个“.m”文件中,内存泄漏发生在viewdidload部分.我查了一下, xcode突出显示了我用值初始化选择器数组的部分.我的程序使用拣货员进行用户输入.我的程序中有3 5个不同的视图.第一个是免责声明,第二个是用户可以选择他/她想要做的计算类型的菜单.每次计算都需要用户从选择器输入的某些输入.例如.其中一个视图有5个输入,由5个不同的uipickers处理,带
@H_696_10@
在进行长轮廓测试后,我发现在我的一个“.m”文件中,内存泄漏发生在viewdidload部分.我查了一下,xcode突出显示了我用值初始化选择器数组的部分.我的程序使用拣货员进行用户输入.我的程序中有3 5个不同的视图.第一个是免责声明,第二个是用户可以选择他/她想要做的计算类型的菜单.每次计算都需要用户从选择器输入的某些输入.例如.其中一个视图有5个输入,由5个不同的uipickers处理,带有用于保存值的单独数组.这些数组使用该视图的viewdidload方法中的值进行初始化.这是我在运行测试后发现的:

 
………………………………………….. ………………………………………….

这是我第一次开发应用程序时,我对于该怎么做感到困惑.任何帮助,将不胜感激.

解决方法

目标c中的对象具有保留计数.如果当对象超出范围时(当您停止使用它时)此保留计数大于0,则它会泄漏.

以下事项会增加保留计数

> [[alloc] init]
>新的
>复制
> [保留]
>将对象添加到数组中
>将对象添加为子对象(例如视图)
>可能还有更多,但您似乎没有在代码中使用任何其他内容

以下减少了保留计数

> [发布]
>从数组中删除对象
>如果你释放一个数组,它的所有对象都会被释放

您应该检查代码并确保数组的每个保留或添加都与相应的版本匹配. (您可以在dealloc方法中释放成员变量).

编辑:杰里米提出了一个有效的观点,我的答案没有

还有自动释放对象,看看这个例子;

-(init){
    ...
    stagePickerArray = [[NSMutableArray alloc] init];
    for (int i = 0; i < 3; i++)
    {
        //this String is autoreleased,you don't have call release on it.
        //methods with the format [CLASS CLASSwithsomething] tend to be autorelease
        NSString *s = [NSString StringWithFormat:@"%d",i);
        [stagePickerArray addObject:s];
    }
    ...
 }

我认为你唯一缺少的就是在你的dealloc方法调用release

-(void) dealloc
{
    [stagepickerarray release];  //Do this for each of your arrays
    [super dealloc];
}

大佬总结

以上是大佬教程为你收集整理的objective-c – 如何修复内存泄漏?全部内容,希望文章能够帮你解决objective-c – 如何修复内存泄漏?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。