我在班级NSNumber
中有一个变量。我想将此var的值传递给另一个类var。问题是当我尝试设置第二个类var的值时,我释放了第一个类的对象并获得了一条错误消息。
在C ++中,这很容易做到。但是这里的内存管理和指针让我非常困惑。
解决方案代码,用于测试:
#import <Foundation/Foundation.h>
@interface A : NSObject
{
NSNumber *a;
}
@property (nonatomic, retain) NSNumber *a;
@end
int main(int argc, char *argv[])
{
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
A *instance1 = [[A alloc] init];
A *instance2 = [[A alloc] init];
[instance1 setA:[NSNumber numberWithFloat:5.43f]];
instance2.a = [instance1.a copy];
[instance1 release];
NSLog(@"Valor de la que sigue viva, parte2: %@", instance2.a);
[instance2 release];
[p release];
[pool drain];
return 0;
}
答案 0 :(得分:2)
您应该使用retain
属性或copy
实例变量:
@interface A {
NSNumber *a;
}
@property (nonatomic, retain) NSNumber *a;
@end
...
A *instance1 = [[A alloc] init];
A *instance2 = [[A alloc] init];
instance1.a = instance2.a;
//or
instance2.a = [instance1.a copy];
阅读一些关于保留计数内存管理的文档,这是Objective-C使用的。