我对此代码有疑问,它正在调试环境。在仪器上我看到这个功能的内存泄漏问题,仪器正在发出警告
类别事件类型时间戳地址大小负责图书馆负责人 27 SocialNetwork Malloc 00:19.951 0x3d64d20 80基础 - [NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]
- (NSMutableArray *)GetDataInstanceToUserDefaults{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *storedObject = [userDefaults objectForKey:@"MyDataKey"];
NSMutableArray *data;
if(storedObject != nil)
{
NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:storedObject];
if(savedArray != nil)
data = [[NSMutableArray alloc] initWithArray:savedArray];
else
data = [[NSMutableArray alloc] init];
}else{
data = [[NSMutableArray alloc] init];
}
return data;
}
我不明白我的问题在哪里?
感谢您的支持
编辑:顺便说一下,我应该详细介绍这个问题,这个函数(如你所见)是存储我的对象。我的对象是自定义类并存储在NSMutableArray中。
我已经在我的自定义类
中添加了这些方法-(void)encodeWithCoder:(NSCoder *)coder{
-(id)copyWithZone:(NSZone*)zone {
-(id)initWithCoder:(NSCoder *)coder{
答案 0 :(得分:1)
我认为问题很可能出现在自定义类的initWithCoder:
方法中。它正在泄漏,但分析仪报告它在归档器中。
与您的问题无关,我会提醒您不要使用[[NSMutableArray alloc] init]
来初始化集合,尤其是可变集合。而是使用[[NSMutableArray alloc] initWithCapacity:1]
。我发现只使用init
使用initWithCapacity
清除的奇怪问题。