我使用iPhone的Objective-C的JSON Framework插件來通過HTTP捕獲一個JSON對象,該對象是一組Dictionary對象。這是我的connectionDidFinishLoading
功能:iPhone JSON對象釋放自己?
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[loadingIndicator stopAnimating];
NSArray *responseArray = [responseString JSONValue]; // Grab the JSON array of dictionaries
NSLog(@"Response Array: %@", responseArray);
if ([responseArray respondsToSelector:@selector(count)]) {
NSLog(@"Returned %@ items", [responseArray count]);
}
[responseArray release];
[responseString release];
}
的問題是,碼在第二NSLog
線扔EXC_BAD_ACCESS
錯誤。我認爲EXC_BAD_ACCESS
錯誤表明該變量已從內存中釋放,但第一個NSLog
命令正常工作(並顯示數據全部存在);似乎只有當調用count
消息導致錯誤時,但respondsToSelector
調用至少認爲responseArray
應該能夠響應該消息。當使用調試器運行時,它在第二行崩潰,但堆棧顯示responseArray
對象仍然被定義,並且其中有12個對象(所以調試器至少能夠獲得該變量內容的準確count
)。
這是JSON框架創建的那個NSArray
問題,還是我的代碼有問題?
啊善良;當愚蠢的東西陷入我的時候討厭它;我通常使用'%@'作爲一個catch-all,假定甚至像NSInteger這樣的基本變量類型實際上是Objective-C中的一個對象,因此可以用該調用輸出某些東西,但顯然不是這種情況。 – MidnightLightning 2010-05-03 17:13:38
@Midnight,只有Objective-C類類型的實例是對象。你必須記住,Objective-C只能擴展C. – 2010-05-04 14:03:45
@gf有沒有一個列表,其中的類是「Objective-C」類型,而不是「C」類型?我曾經想過'NSUInteger'(從'NSArray''count'方法返回的東西)是一個Objective-C類型,而不是'int'類型(這是一個基本的C類型),因此應該能夠響應到「描述」消息(即使這不是處理它的最合適的方式)? – MidnightLightning 2010-05-04 14:40:46