在对象之间传递数据

时间:2011-12-13 15:32:49

标签: objective-c memory pointers

我在班级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;
}

1 个答案:

答案 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使用的。