【问题标题】:Pass data between objects在对象之间传递数据
【发布时间】:2011-12-13 15:32:48
【问题描述】:

我在一个类中有一个变量,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;
}

【问题讨论】:

  • 您能否发布一些代码,以便我们更好地理解您的意思?谢谢。
  • 抱怨内存管理和指针让您感到困惑,然后以 C++ 为例,但事实并非如此,这让我感到害怕......对于一些实际代码也 +1。这是同一个类的两个实例还是两个类中的一个实例?
  • 很抱歉没有发布一些代码,但我认为这比我的解释更令人困惑。现在我插入@Denis 建议我的解决方案。

标签: objective-c memory pointers


【解决方案1】:

您应该使用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 使用的保留计数内存管理的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多