Iphone 这个号码怎么了

Iphone 这个号码怎么了,iphone,objective-c++,nsnumber,Iphone,Objective C++,Nsnumber,我写了这段代码: bs = [NSNumber numberWithFloat:[mystring.text floatValue]]; NSLog(@"bs = %@",bs); 当程序想要执行上面的行时,为什么会崩溃 输出: bs=2.8,在您将NSNumber对象分配给ivar bs的时间与运行时发布的时间之间为100%。我假设在两种不同的方法中,您在哪里创建了bs,在哪里尝试将其分配给x。如果是这种情况,您需要告诉运行时您希望将ivar bs保留一段时间: [bs retain];

我写了这段代码:

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

当程序想要执行上面的行时,为什么会崩溃

输出:
bs=2.8,在您将NSNumber对象分配给ivar bs的时间与运行时发布的时间之间为100%

。我假设在两种不同的方法中,您在哪里创建了bs,在哪里尝试将其分配给x。如果是这种情况,您需要告诉运行时您希望将ivar bs保留一段时间:

[bs retain];
如果您这样做,您需要告诉运行时您在dealloc中完成了:

-(void)dealloc {
    [bs release];
    [super dealloc];
}
基本上,如果您没有在方法名称中使用alloc、copy、mutableCopy、new创建对象,那么您就不拥有该对象。

代码片段似乎没有问题。 我猜原因是,
bs
在获取其浮点值之前被释放。 保留
bs
的最简单方法是将其更改为属性:

@property (nonatomic,retain)NSNumber* bs;

然后在
dealloc

中发布
release
只要bs没有自动释放,代码看起来就可以了。请提供更多代码。令人敬畏的100%工作,但我将[bs retain]放在第一个方法中,但为什么如果我不将其放在其中,bs会丢失其数据?当您使用class方法+numberWithFloat创建NSNumber时,您并不拥有该对象。对象被设置为自动释放。如果您使用实例方法-initWithFloat,那么您拥有该对象,因为您必须使用+alloc来创建它。Cocoa内存管理的所有部分。
@property (nonatomic,retain)NSNumber* bs;