[英]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.