簡體   English   中英

對象已釋放-為什么? 哪里?

[英]Object is deallocated - why? where?

好的,我花了最后8個小時與之抗爭-似乎超出了我的范圍。 這是我完整的(相關)代碼:

- (void)updateUserDefaults
{
    NSMutableDictionary *viewControllerDetails = [[NSMutableDictionary alloc] initWithCapacity:4];

    [viewControllerDetails setObject:[NSNumber numberWithInt:OOVenueClassControllerType] forKey:@"classType"];
    [viewControllerDetails setObject:self.searchTerm forKey:@"searchTerm"];
    [viewControllerDetails setObject:self.searchLocation forKey:@"searchLocation"];

    //----- the next two lines cause the problem
    NSString *res = [[NSString stringWithFormat:@"%@",[searchResults xmlString]] retain];
    [viewControllerDetails setObject:res forKey:@"searchresults"];
    //-----

    NSMutableArray *viewControllersList = [NSMutableArray array] ;
    [viewControllersList addObject:viewControllerDetails];

    NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
    //the following line causes the error
    [defs setObject:viewControllersList forKey:kViewControllersKey];
    [defs synchronize];

    [res release];
}

注意the next two lines cause the problem的代碼塊the next two lines cause the problem 最初,我沒有創建另一個字符串,但是稍后嘗試解決該問題時將其添加。

如果我將這兩行注釋掉,一切正常。 如果我把它們放回去,我得到

- [CFString class]: message sent to deallocated instance 0xa1a9000

我要放入userdefaults的字符串有問題嗎? 該字符串相當大(約200,000個字符),但是我過去在用戶默認值中存儲了更長的字符串。

還值得注意的是,如果我卸載該應用程序,則一切正常。 但是,在隨后的運行中,問題就顯現出來了。

那么,如何以及為什么以及在哪里將字符串釋放呢? 我已明確添加了retain -但這仍然無濟於事。 我想念什么?

編輯:剛意識到我忘了說錯誤是在線上拋出

[defs setObject:viewControllersList forKey:kViewControllersKey];

同樣,對於一般信息, searchResults上的方法- (NSString *)xmlString確實具有名稱的含義:使用來自該對象的信息創建XML字符串。

編輯2:我嘗試使用該字符串做其他事情-將其轉換為NSData ,使用zlib壓縮-但無論數據類型如何,都會釋放該特定對象。 它必須與字符串的大小有關嗎?

NSString *res = [[NSString stringWithFormat:@"%@",[searchResults xmlString]] retain];

自動釋放。 您無需在方法結束時將其釋放。 您正在過度釋放它。

此外,您無需保留[searchResults xmlString] stringWithFormat方法已經為您完成了。

祝好運!

好的,不確定到底是什么問題,但這是在searchResults和/或xmlString方法中的某個地方。 searchResults對象最初是根據從服務器接收到的XML創建的(XML被解析為對象結構)。 調用xmlString時,由於某種原因,我返回的字符串與原始XML不同(當然,我不是在談論格式)-200,000個字符長的字符串,在前500個字符之內,大約有200個字符差異。 我一直無法弄清楚為什么。 因此,我沒有從對象結構中重新創建xml,而是將原始XML存儲在該對象的字段中,並且在xmlString時,僅返回了原始字符串。 現在一切正常。

謝謝大家在這一痛苦過程中的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM