我遇到了我创建的类的init
方法泄漏问题。为了简单起见,我有以下(简化)问题:
的ViewController:
myClipData = [[ClipData alloc] init];
ClipData:
- (id)init
{
self = [super init];
if (self) {
animData = [[AnimationData alloc] init]; //LEAK HERE
}
return self;
}
AnimationData:
- (id)init
{
self = [super init];
if (self) {
name = [NSString string];
}
return self;
}
类中的所有对象都声明为(nonatomic, retain)
。我知道这样做会增加保留计数,但如何初始化AnimationData
而不泄漏animData
???
可能是一个非常愚蠢的问题,所以任何帮助都非常感激。
谢谢,
Duncs
答案 0 :(得分:1)
您永远不会发布animData。您需要在班级中添加dealloc
:
- (void)dealloc {
[animData release];
[super dealloc];
}
同样,您需要向dealloc
添加类似的AnimationData
。
在相关的说明中,你需要保留并稍后释放在-[AnimationData init]
中创建的字符串,你现在正在做的事实上是一个noop,除了它留下一个乱码指针。
答案 1 :(得分:0)
当你有一个分配时,你也必须有一个版本。
您还应该通过self引用属性,以便访问属性而不是基础成员。
所以你应该这样做:
ClipData *clip = [[ClipData alloc] init];
self.myClipData = clip;
[clip release];
并且
if (self) {
AnimationData *data = [[AnimationData alloc] init];
self.animData = data;
[data release];
}
确保通过将它们设置为nil来释放类的dealloc中的属性。
self.myClipData = nil;
self.animData = nil;