2011-03-27 33 views
1

我寫了這個代碼:有什麼不好的NSNumber

bs = [NSNumber numberWithFloat:[mystring.text floatValue]]; 
NSLog(@"bs = %@",bs); 

....

float x = [bs floatValue]; 
當程序要EXCUTE它上面的線崩潰,爲什麼

輸出: BS = 2.8,其真正的100%

+0

該代碼看起來不錯,只要BS沒有得到自動釋放。請更多代碼。 – ssteinberg 2011-03-27 14:19:10

回答

2

你分配一個NSNumber對象的伊娃BS當時是由運行時釋放之間。我假設你在哪裏創建了bs,並且你試圖將它分配給x的地方有兩種不同的方法。如果是這樣的話,你需要告訴運行時要保持周圍伊娃BS一段時間:

[bs retain]; 

如果你這樣做,你需要告訴你的dealloc中所做的運行:

-(void)dealloc { 
    [bs release]; 
    [super dealloc]; 
} 

基本上,如果您沒有在方法名稱中創建帶有alloc,copy,mutableCopy,new的對象,那麼您不擁有該對象。

+0

真棒100%的工作,但我把[bs保留]在第一種方法,但爲什麼如果我不把它失去其數據? – 2011-03-27 14:39:45

+0

當您使用類方法+ numberWithFloat創建您的NSNumber時,您不擁有該對象。該對象設置爲autorelease。如果您使用實例方法-initWithFloat,則您擁有該對象,因爲您必須使用+ alloc來創建它。可可內存管理的所有部分。 – 2011-03-27 14:43:46

1

代碼片段似乎沒問題。 ,我猜原因是bs在獲取其浮點值之前被釋放。 最簡單的方式retainbs是將其更改爲一個屬性:

@property (nonatomic,retain)NSNumber* bs; 

releasedealloc