就在我以爲我已經得到了Objective-C的內存管理這個錯誤給我的印象來自無處的竅門......的NSXMLParser和「修改之後被釋放」錯誤
請考慮下面的代碼:
@implementation JglpNewsEntryParser
- (JglpNewsEntryParser *) initialize : (NSString *)content {
self = [super init];
if (self) {
currentHeader = nil;
currentText = nil;
currentDate = nil;
currentFullArticleUrl = nil;
entries = [[NSMutableArray alloc] init];
NSData *data = [content dataUsingEncoding: [NSString defaultCStringEncoding]];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:data] autorelease];
[parser setDelegate: self];
[parser parse];
}
return self;
}
- (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict {
NSLog(@"Start!");
}
- (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName {
NSLog(@"End!");
}
- (void)parser: (NSXMLParser *)parser foundCharacters: (NSString *)content {
NSLog(@"Char!");
}
- (void)dealloc {
[super dealloc];
[entries release];
entries = nil;
}
該類在我的單元測試中使用以下方式:
- (void) testConstruct {
NSString *path = [[NSBundle bundleForClass:JglpNewsEntryParserTest.class] pathForResource: @"single-news-entry" ofType: @"html"];
NSError *error = nil;
NSString *data = [NSString stringWithContentsOfFile: path encoding: NSUTF8StringEncoding error: &error];
JglpNewsEntryParser *parser = [[[JglpNewsEntryParser alloc] initialize: data] autorelease];
STFail(@"");
}
打印!「開始」後,「結束!」和「Char!」消息一次,因爲文本XML只包含一個條目,所以測試失敗,因爲它應該在STFail
。不過,我後來收到下面的內存錯誤消息:
malloc: *** error for object 0xedf434: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
構建在initialize
的data
對象似乎掀起了末日機器。如果我取消註釋,則消息消失。
// ...
/*NSData *data = [content dataUsingEncoding: [NSString defaultCStringEncoding]];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:data] autorelease];
[parser setDelegate: self];
[parser parse];*/
}
return self;
}
我思念的東西從NSString
構建NSData
對象時?
感謝您的任何建議和問候 KC
你會看看那個!再見神祕記憶留言!感謝您的建議,我會牢記這些命名約定。 –