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

这是我第一次开发应用程序时,我对于该怎么做感到困惑.任何帮助,将不胜感激.
Objective c 中的对象有一个保留计数。如果当对象超出范围(当您停止使用它时)时,保留计数大于 0,则它会泄漏。
以下事情会增加保留计数
以下减少保留计数
您应该检查代码并确保数组中的每个保留或添加都与相应的版本匹配。(可以在dealloc方法中释放成员变量)。
编辑:杰里米提出了一个有效的观点,但我的回答没有
一旦你将一个对象添加到数组中,它就会获取所有权,并在使用完该对象后释放该对象。您需要做的就是确保根据内存管理规则释放您拥有的任何内容
还有autorelease对象,看看这个例子;
-(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];
}
...
}
Run Code Online (Sandbox Code Playgroud)
我认为您唯一缺少的是在 dealloc 方法中调用release
-(void) dealloc
{
[stagepickerarray release]; //Do this for each of your arrays
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)