試圖進入內存管理,同時尋找泄漏,我遇到了一個問題。我有一個應用程序,它爲NSMutablearray中的某個級別放置了一個分數(int),以便將其保存起來,並且當我在數組中「替換」它時(我知道我可能不應該這樣做,但無論如何)它留下一個持久的分配。我想我的問題出現了,因爲它是一個百分比,我在做數學時遇到了問題。如果我這樣做:Xcode儀器和持久分配
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]];
然後我得到的問題。我總是從分配工具中獲得1個來自NSPlaceholderNumber的CFNumber Malloc。我初始化我的數組,然後唯一的方法是:
score = 75;
float testing = (float)score/(5) * 100;
NSNumber *test = [NSNumber numberWithFloat:testing];
level++;
[scores replaceObjectAtIndex:level withObject:test];
我不明白爲什麼一個方式會導致它,而不是其他的,或者我應該怎麼做是正確的,以避免這個問題?我甚至做了另一個只做這個例程的項目,我仍然有這個問題。提前感謝您的任何建議。
+ numberWithInt增量NSNumber的保留計數。乾淨利落。 – CodaFi 2012-03-24 04:59:41
在這種情況下,我將如何遞減?不過,我在使用numberWithInt時沒有問題。 – tst 2012-03-24 09:19:09
CodaFi的評論是錯誤的(實際上,它沒有任何意義); + numberWithInt:返回一個自動釋放的對象。在數組中時,它被保留。當被刪除,釋放。 – bbum 2012-03-24 17:37:14