Objective-c - initWithCoder 和内存管理?

标签 objective-c ios nskeyedarchiver nscoding

我在 initWithCoder 方法中遇到泄漏。

unarchiveObjectWithData:cacheData 是否返回一个自动释放的对象?谁负责释放从 unarchiveObjectWithData:cacheData 返回的对象?

@implementation MyObject
@synthesize something = _something;

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init])
    {
         self.something = [aDecoder decodeObjectForKey:@"something"];
    }
}

- (void)dealloc
{
        self.something = nil;
        [super dealloc];
}

@end

这是我从文件读取对象的地方

MyObject *myObject = [NSKeyedUnarchiver unarchiveObjectWithData:cacheData];

最佳答案

Does unarchiveObjectWithData:cacheData return me an autoreleased object? whose responsible to release the object return from unarchiveObjectWithData:cacheData?

只要记住NARC即可。如果您调用的方法以 newallocretaincopy 开头,那么您拥有任何对象被返回并必须释放它。如果没有,则会自动释放。

关于Objective-c - initWithCoder 和内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525401/

相关文章:

ios - 未存档对象数据时面临的问题

swift3 - 如何将字典写入文件?

objective-c - 如何在 Objective-C 中检测图像中的 body ?

iphone - 如何从后台线程中获取/设置全局变量(BOOL)? (Xcode)

objective-c - 是否可以在与在 Objective-C 中使用它的类头文件相同的文件中定义枚举?

ios - 如何在 UITableViewCell 之间添加间距

objective-c - iPhone中的低通滤波器

iphone - 在 View 之间传递字符串 : app crashes

iOS-如何获取位置和联系信息的权限

ios - nskeyedarchiver 不适用于 ios8 但适用于 ios7 和模拟器