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;