我寫了這個代碼:有什麼不好的NSNumber
bs = [NSNumber numberWithFloat:[mystring.text floatValue]];
NSLog(@"bs = %@",bs);
....
float x = [bs floatValue];
當程序要EXCUTE它上面的線崩潰,爲什麼
?
輸出: BS = 2.8,其真正的100%
我寫了這個代碼:有什麼不好的NSNumber
bs = [NSNumber numberWithFloat:[mystring.text floatValue]];
NSLog(@"bs = %@",bs);
....
float x = [bs floatValue];
當程序要EXCUTE它上面的線崩潰,爲什麼
?
輸出: BS = 2.8,其真正的100%
你分配一個NSNumber對象的伊娃BS當時是由運行時釋放之間。我假設你在哪裏創建了bs,並且你試圖將它分配給x的地方有兩種不同的方法。如果是這樣的話,你需要告訴運行時要保持周圍伊娃BS一段時間:
[bs retain];
如果你這樣做,你需要告訴你的dealloc中所做的運行:
-(void)dealloc {
[bs release];
[super dealloc];
}
基本上,如果您沒有在方法名稱中創建帶有alloc,copy,mutableCopy,new的對象,那麼您不擁有該對象。
真棒100%的工作,但我把[bs保留]在第一種方法,但爲什麼如果我不把它失去其數據? – 2011-03-27 14:39:45
當您使用類方法+ numberWithFloat創建您的NSNumber時,您不擁有該對象。該對象設置爲autorelease。如果您使用實例方法-initWithFloat,則您擁有該對象,因爲您必須使用+ alloc來創建它。可可內存管理的所有部分。 – 2011-03-27 14:43:46
代碼片段似乎沒問題。 ,我猜原因是bs
在獲取其浮點值之前被釋放。 最簡單的方式retain
bs
是將其更改爲一個屬性:
@property (nonatomic,retain)NSNumber* bs;
和release
它dealloc
該代碼看起來不錯,只要BS沒有得到自動釋放。請更多代碼。 – ssteinberg 2011-03-27 14:19:10