2011-03-06 124 views
0

我正在從「XMLReader」類讀取XML文件,該類是我從應用程序委託創建和調用的。在XMLReader類中,我創建了一個包含在XML中讀取的數據的「AppState」對象。 XMLReader在創建它時自動釋放AppState類。當XMLReader完成時,應用程序委託將AppState實例分配給它自己的變量,保留它並釋放XMLReader類。在應用程序委託的代碼看起來是這樣的:內存分配設計問題

XMLReader *xmlReader = [[XMLReader alloc] init]; 

[xmlReader parseXMLData: data]; 

appState = xmlReader.appState; // <== xmmReader creates appState with autorelease 

[appState retain]; 

[xmlReader release]; 

我有點不清楚是否有你不應該需要在類中保持分配對象該對象被分配的約定。在這種情況下,由於autorelease需要 - 如果我不保留它在應用程序委託中,應用程序崩潰。有沒有更好的辦法?例如我可以在委託中創建AppState並將其設置在XML閱讀器中。這樣alloc和release可以在同一個類中。這樣做的典型方法是什麼?

回答

1

有一個更好的方法 - 只需爲您的appState對象創建(保留)@property,將其合成並將您的xmlReader.appState分配給self.appState。

這是保留新值並將其分配給您的appState對象。

然後,您可以釋放它/將它設置爲無應用程序委託的dealloc方法。

@interface XXX : AppDelegate 
{ 
} 
@property (nonatomic, retain) XXXXX appState 

並實行

@implementation XXX 
@synthesize appState; 

然後用

self.appState = xmlReader.appState; 
+0

完美的工作。謝謝。 – 2011-03-06 20:30:45

1

如果您appState類的屬性分配,那麼你就可以使用分配給它:

self.appState = xmlReader.appState; 

合成(如果您聲明財產爲retain,或者如果appState是一個字符串,則通常也聲明該財產爲copy)。