2011-12-13 170 views
-2

我有一个类的变量,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

你可以发表一些代码,所以我们最好明白你的意思吗?谢谢。 – melbic

+0

抱怨关于内存管理和指针混淆你,然后引用C++作为一个例子,如果不是这种情况会让我感到恐慌......还有一些实际的代码。这是同一个类的两个实例还是两个类中的每个实例? –

+0

对不起,不要发布一些代码,但我认为会比我的解释更混乱。现在我插入解决方案@Denis提出了我。 –

回答

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使用。