尝试进入内存管理,同时寻找泄漏,我遇到了一个问题。我有一个应用程序,在NSMutablearray中为一个级别放置一个得分(int),以便保存它,当我在我的数组中“替换”它时(我知道我可能不应该这样做,特别是但是无论如何它留下持久的alloc。我想我的问题出现了,因为它是一个百分比,我在做数学时遇到了问题。如果我这样做:
NSNumber *test = [NSNumber numberWithInt:score];
[scores replaceObjectAtIndex:level withObject:test];
没有问题。但是,如果我做了像
这样的事情float testing = (float)score/(5) * 100;
NSNumber *test = [NSNumber numberWithFloat:testing];
[scores replaceObjectAtIndex:level withObject:test];
or
[scores replaceObjectAtIndex:level withObject:[NSString stringWithFormat:@"%i", score]];
然后我得到了这个问题。我总是从分配工具中获得从NSPlaceholderNumber调用的1个CFNumber Malloc。我初始化我的数组然后唯一的方法是:
score = 75;
float testing = (float)score/(5) * 100;
NSNumber *test = [NSNumber numberWithFloat:testing];
level++;
[scores replaceObjectAtIndex:level withObject:test];
我不明白为什么一种方式会导致它而不是另一种方式,或者我应该如何正确地避免这个问题呢?我甚至做了另一个项目,只做这个例程,我仍然有问题。提前感谢任何建议。
答案 0 :(得分:1)
您需要定义您认为是问题的内容。
numberWithInt:
和numberWithFloat:
都返回一个对象,您必须保留该对象才能使其超出对该方法的调用范围。像往常一样将对象推入数组中会导致对象被数组保留,因此,它将在数组的所有权下保持不变。
该代码没有泄漏,代码中也没有任何问题。
要记住的一个关键是泄漏工具会显示泄漏分配的位置,但不会显示导致泄漏的代码行。即如果test
号码被泄露,那是因为它在其他地方被过度保留。
等等 - “持久分配”是什么意思?即int粘在一起?请注意,对于某些整数值,NSNumber具有单例。