2011-12-13 203 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使用。