繁体   English   中英

如何正确保留从plist读取的数据?

[英]how to properly retain data read from plist?

我无法调试NSInvalidArgumentException。 我最近的怀疑是我没有正确地保留从plist中读取的数据,因此当我访问它时它被其他一些对象占用。

我的plist结构非常复杂,它有8级数组/字典。 当我尝试访问最低的对象时,我想我丢失了内存。

我想知道在读取plist文件时是否必须保留每个数据元素,还是仅仅保留顶级对象就足够了?

这是我读的方式:

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSError *error = [[[NSError alloc] init] autorelease];
NSArray *temp = (NSArray *)[[NSPropertyListSerialization
                            propertyListWithData:plistXML 
                            options:NSPropertyListMutableContainersAndLeaves
                            format:nil 
                            error:&error] retain];
self.dataPackage = [temp objectAtIndex:0];

dataPackage声明为:

@interface rootViewController:UIViewController{
  NSDictionary *dataPackage;
}
@property (retain) NSDictionary *dataPackage;

并合成:

@synthesize dataPackage;

我做得对吗?

谢谢

狮子座

我注意到三件事:

  • 您不需要创建NSError对象! 如果出现故障,NSPropertyListSerialization将返回错误对象。 只需init: NSError *error = nil;

  • 您不必保留(自动释放)临时数组,在索引0处获取对象后,您显然不需要整个数组。

  • 当数组为空时, [temp objectAtIndex:0]将崩溃!

请务必使用self.dataPackage = nil在dealloc中释放属性var。 从内存管理的角度看,一切都是安全的。

请仔细阅读TextEdit中的Plist结构....有关更多信息,请阅读我之前的帖子如果您使用的是Xcode 4,那么这可能就是原因。 结构可能在xcode 4中发生了变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM