我有這行代碼,我試圖找出我寫它的方式的利弊。我只是想設置一個標籤爲浮點值和兩個工作....只是不知道哪個好...的NSNumber numberWithFloat VS初始化或Alloc
self.display.text=[[NSNumber numberWithFloat:32.445] stringValue];
有什麼區別說
NSNumber *number = [[NSNumber alloc]initWithFloat:32.445];
self.display.text = [number stringValue];
好吧 - 我知道這一定是有區別的 - 只是不確定它會是什麼。看起來像第一個是更多的包裝(如果這是有道理的)?
謝謝!
他們可以實際行爲完全不同的練習 - 至少在32位目標上。我只是跑測試在Xcode 7.2.1,發現'+ numberWithFloat'和'@(N)'都在分配的對象必須在以後自動釋放,而如果你在一個大循環產生大量的這些,會浪費大量的內存(每個'unsigned long long int'大約20個字節)。相比之下,'+ alloc' /'+ init'使對象可以在最後一次使用後立即銷燬。奇怪的是,在64位目標,既不這三種替代的吞噬存儲器。我不知道爲什麼。 – 2016-03-11 00:46:00
當然,如果你是在一個循環中,將自動釋放會殺了你的任何物體。性能和記憶明智。在64位,Foundation使用標記的指針(https://en.m.wikipedia.org/wiki/Tagged_pointer)一樣,因爲它可以爲NSNumbers以避免分配/解除分配。 – Julien 2016-03-16 00:45:02