- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NSXMLParser,我得到一个指向 NSConcreteMapTable 的内存泄漏,无论它是什么:
从我的 AppDelegate.m 调用解析器时,泄漏发生在这行代码处:
我已经搜索了解决方案,但看不出我做错了什么。这是我的代码。任何帮助是极大的赞赏。q
// * * * XMLParser.h * * *
#import <Foundation/Foundation.h>
@protocol NSXMLParserDelegate;
@interface XMLParser : NSObject
<NSXMLParserDelegate>
{
NSMutableArray *xmlArray;
BOOL storingCharacters;
float xmlDataVersion;
}
@property (nonatomic, retain) NSMutableArray *xmlArray;
@property (nonatomic) BOOL storingCharacters;
@property (nonatomic, assign) float xmlDataVersion;
-(BOOL)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error;
@end
// * * * XMLParser.m * * *
#import "XMLParser.h"
@implementation XMLParser
@synthesize xmlArray;
@synthesize storingCharacters;
@synthesize xmlDataVersion;
- (BOOL)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error {
BOOL result = YES;
if (xmlArray == nil) {
// this array holds row data extracted from the XML parser didStartElement method
xmlArray = [[NSMutableArray alloc] init];
}
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
if (parser != nil) {
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[[parser setShouldResolveExternalEntities:NO];
}
[parser parse];
if (parseError && error) {
*error = parseError;
result = NO;
}
[parser release];
return result;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if (qName) {
elementName = qName;
}
// Check the data version of the XML Data against my stored value
if ([elementName isEqualToString:@"data"]) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
self.xmlDataVersion = [[attributeDict objectForKey:@"version"] floatValue];
float storedDataVersion = [userDefaults floatForKey:kDataVersion];
if (self.xmlDataVersion <= storedDataVersion) {
// - - - - -> Abort parsing if the same or earlier data versions
[parser abortParsing];
}
}
if ([elementName isEqualToString:@"FirstColumnName"]) {
storingCharacters = YES;
} else if ([elementName isEqualToString:@"SecondColumnName"]) {
storingCharacters = YES;
// ... total of 16 elements
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (storingCharacters) {
[self.xmlArray addObject:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (qName) {
elementName = qName;
}
// - - - - -> If at the end of a data row, save changes to object model
if ([elementName isEqualToString:@"ROW"]) {
// - - - - -> Make sure the data has the required number of elements before taking any action
if ([self.xmlArray count] == 16) {
// … //Store or Update Data in SQLite store depending on data values
}
[self.xmlArray removeAllObjects];
}
storingCharacters = NO;
}
-(void)dealloc {
[xmlArray release];
[super dealloc];
}
// * * * AppDelegate.m * * *
#import "XMLParser.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSURL *xmlURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"FileName" ofType:@"xml"]];
NSError *parseError = nil;
XMLParser *xmlParse = [[XMLParser alloc] init];
[xmlParse parseXMLFileAtURL:xmlURL parseError:&parseError];
[xmlParse release];
. . .
最佳答案
我在另一个 SO 中找到了解决方案帖子:
使用:
NSData * dataXml = [[NSData alloc] initWithContentsOfURL:URL];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:dataXml];
[dataXml release];
代替:
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
泄漏消失了。
关于xcode - 在 NSConcreteMapTable 中使用 NSXMLParser 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019240/
我在 NSXMLParser 中崩溃了 * Terminating app due to uncaught exception 'NSInternalInconsistencyException',
我有 NSXMLParser 问题,我尝试了 iOS8 NSXMLParser crash这个话题,但我真的没有得到解决方案。 我正在创建另一个 NXSMLParser 委托(delegate)并将其
我目前正在尝试使用外部已解析实体引用来解析包含另一个 XML 的 XML。但是,NSXMLParser 会引发错误,而不是解析包含的 XML。 xml 看起来有点像这样: ]>
我正在使用 NSXMLParser 来解析此 XML:http://itunes.apple.com/gb/rss/topsongs/limit=50/explicit=true/xml 。我正在尝试
NSXMLParser 是什么样的解析器? 是 dom 解析器还是 sax 解析器。 有多少个解析器? 最佳答案 它是一个 SAX 解析器。有许多可用于 iOS 的 DOM XML 解析器,我见过的最
我有以下泄漏的代码。 Instruments 表示,泄漏的是 rssParser 对象。我“刷新”了 XML 提要,它运行了该 block 并且发生了泄漏...... 文件.h @interface
如何将本地路径传递给NSXMLParser 像这样 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:storeP
我使用从互联网获取的可变数据初始化 NSXMLParser。我想知道解析器是否在释放时释放它,或者我必须在解析后释放它? 谢谢 最佳答案 Cocoa 使用“这不是我的问题”来比喻内存管理。 如果将某些
我有以下 XML(为 iPhone 开发一个应用程序): 00070431 John Doe ... 如何仅检索其中一个属性的值,例如属性 name="given_name"的值“John”? 感
下面是 MREntitiesConverter 对象的 @interface,我使用 NSXMLParser 从字符串中剥离所有 html 标签。 @interface MREntitiesConve
我想编写一个 NSXMLParser,我在 NSString(已编码)中有数据。 如果我将 NSString 放入 NSLog,它会给出我需要的正确行。但是,当我想使用来自 NSString 的数据启
这与我之前的问题类似。我没有得到答案,也许通过改变问题我可能会得到答案。 这是我的解析代码: -(void) parser:(NSXMLParser *) parser didStartElemen
我正在尝试解析一些简单的东西,但我不知道该怎么做..我已经解析了之前有一些 xml,但这个结构没有任何内容,所以我有点迷失。 这是 xml。
我正在我的应用程序中解析 XML 文件,最奇怪的事情发生了。它在多个元素之后停止,没有完成该元素,但解析方法仍然返回成功。我感觉某个地方有一个错误的角色,但无法弄清楚。有谁知道为什么它在解析过程中停止
我想解析 [description] [p] blah blah [/description] [/p] 中包含的描述 Jon Greene named associate director
我正在尝试从 xml 网络源获取内容列表。我正在使用 NSXMLParser atm。 代码如下: - (void)main { self.workingArray = [NSMutableA
我有这样的xml数据 dendritical Empty மரம
我刚刚阅读了一个关于 nsxmlparsing 的不同问题的答案。其中有人说你应该使用 self。更好的内存管理符号...这是什么意思? 我在初始化字典时遗漏了这个,我应该把它放进去吗?它有多大帮助或
我在 XML 中有一行包含 % 符号。但是 NSXMLParser 也改变了一些数字,如下所示 2013-11-16 01:08:07.102 ECP[46386:a0b] string is Inc
我正在尝试解析一个 xml 文件(下面的链接)以获取所有带有标签的文本。我能够做到这一点,但解析器忽略了以破折号 (-) 结尾的行并仅将其替换为破折号(请参见下面的示例),并且一些带有说话标记的说话标
我是一名优秀的程序员,十分优秀!