2011-03-27 55 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