相关疑难解决方法(0)

NSAutoreleasePool自动释放池如何工作?

据我了解,任何使用alloc,newcopy创建的东西都需要手动释放.例如:

int main(void) {
    NSString *string;
    string = [[NSString alloc] init];
    /* use the string */
    [string release];
}
Run Code Online (Sandbox Code Playgroud)

不过,我的问题是,这不是有效吗?:

int main(void) {
    NSAutoreleasePool *pool;
    pool = [[NSAutoreleasePool alloc] init];
    NSString *string;
    string = [[[NSString alloc] init] autorelease];
    /* use the string */
    [pool drain];
}
Run Code Online (Sandbox Code Playgroud)

memory-management foundationkit objective-c nsautoreleasepool

95
推荐指数
4
解决办法
9万
查看次数

使用NSXMLParser将XML解析为Core Data存储时的内存构建

我的应用程序有一个问题,它采用XML提要,解析它,并将结果存储到Core Data中.

问题仅发生在应用程序的第一次运行时,当商店中没有任何内容并且整个订阅源被解析和存储时.问题只是内存分配累积起来,直到50%的尝试崩溃应用程序,通常大约10Mb.分配的对象似乎是CFData(存储)对象,我似乎无法找到任何强制释放它们的方法.如果你可以让它运行一次并成功完成解析并保存到核心数据,那么每次后续启动都没问题,内存使用量永远不会超过2.5Mb

这是我们进入代码之前的一般方法:将feed添加到NSData对象中.使用NSFileManager将其存储为文件.从文件路径创建URL并将其提供给parseXMLFile:方法.代表是自我.在到达解析器时:didStartElement:namespaceURI:qualifiedName:attributes:我创建一个字典来捕获我需要的标签中的数据.解析器:foundCharacters:方法将标记的内容保存到字符串解析器:didEndElement:...方法然后确定标记是否是我们需要的东西.如果是这样的话,它会将它添加到字典中,否则它会忽略它.一旦它到达项目的末尾,它就会调用一种方法将其添加到核心数据存储中.

通过查看示例代码和其他人发布的帖子,似乎一般方法中没有任何错误.

代码如下,它来自视图控制器的更大上下文,但我省略了任何不直接相关的内容.

就我已经尝试的事情而言:feed是XML,没有转换为JSON的选项,抱歉.这不是在共享文档区域中找到并存储的图像.

关于它可能是什么的线索:这是我从Instruments获得的最大数量最多的东西(每件256k):

对象地址类别创建时间实时大小负责图书馆负责人

1 0xd710000 CFData(store)16024774912•262144 CFNetwork URLConnectionClient :: clientDidReceiveData( _CFData const*,URLConnectionClient :: ClientConnectionEventQueue*)

这是代码,为内容的匿名编辑;)

-(void)parserDidStartDocument:(NSXMLParser *)feedParser { }

-(void)parserDidEndDocument:(NSXMLParser *)feedParser { }

-(void)parser:(NSXMLParser *)feedParser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    eachElement = elementName;
    if ( [eachElement isEqualToString:@"item" ] )
    {
        //create a dictionary to store each item from the XML feed
        self.currentItem = [[[NSMutableDictionary alloc] init] autorelease];
    }
}


-(void)parser:(NSXMLParser *)feedParser foundCharacters:(NSString *)feedString 
{
    //Make sure that tag content doesn't …
Run Code Online (Sandbox Code Playgroud)

xml core-data objective-c nsxmlparser ios

3
推荐指数
1
解决办法
1954
查看次数