gpt4 book ai didi

iphone - 如何在不使我的应用程序崩溃的情况下发布此 NSXMLParser?

转载 作者:行者123 更新时间:2023-12-03 16:25:31 28 4
gpt4 key购买 nike

下面是 MREntitiesConverter 对象的 @interface,我使用 NSXMLParser 从字符串中剥离所有 html 标签。

@interface MREntitiesConverter : NSObject {
NSMutableString* resultString;
NSString* xmlStr;
NSData *data;
NSXMLParser* xmlParser;
}
@property (nonatomic, retain) NSMutableString* resultString;
- (NSString*)convertEntitiesInString:(NSString*)s;
@end

这是实现:

@implementation MREntitiesConverter
@synthesize resultString;
- (id)init
{
if([super init]) {
self.resultString = [NSMutableString string];
}
return self;
}

- (NSString*)convertEntitiesInString:(NSString*)s {
xmlStr = [NSString stringWithFormat:@"<data>%@</data>", s];
data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
xmlParser = [[NSXMLParser alloc] initWithData:data];

[xmlParser setDelegate:self];
[xmlParser parse];

return [resultString autorelease];
}

- (void)dealloc {
[data release];
//I want to release xmlParser here but it crashes the app
[super dealloc];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s {
[self.resultString appendString:s];
}
@end

如果我在 dealloc 方法中释放 xmlParser ,我的应用程序就会崩溃,但如果不释放,我显然会泄漏内存。

我是 Instruments 新手,正在尝试掌握优化此应用程序的窍门。您就这个特定问题提供的任何帮助都可能帮助我解决应用中的其他内存问题。

您的期待受挫:)Oisin

最佳答案

您的类和 NSXMLParser 都在释放数据,这会导致您当前的崩溃。唯一的成员应该是 resultString。您应该在convertEntitiesInString:而不是init中初始化resultString,因此同一个实例可以多次使用。您应该从 Convert 返回 self.resultString 或 [[resultString keep] autorelease] ,因为如果您按预期在 dealloc 中释放 resultString,则当前所做的操作将导致稍后双重释放。您应该直接在 parser:foundCharacters: 中使用 resultString,而不是 self.resultString,这是一个方法调用。

关于iphone - 如何在不使我的应用程序崩溃的情况下发布此 NSXMLParser?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680095/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com