传递对象之间的数据
问题描述:
我有一个类的变量,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;
}
答
你应该使用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使用。
你可以发表一些代码,所以我们最好明白你的意思吗?谢谢。 – melbic
抱怨关于内存管理和指针混淆你,然后引用C++作为一个例子,如果不是这种情况会让我感到恐慌......还有一些实际的代码。这是同一个类的两个实例还是两个类中的每个实例? –
对不起,不要发布一些代码,但我认为会比我的解释更混乱。现在我插入解决方案@Denis提出了我。 –