CCLayer的dealloc 析构里面不要去释放 不是自己的child的 成员
我在一个自己的ALayer里面的init函数里面,创建了BLayer的一个对象:
BLayer blayer = [BLayer node];
[self.parent addChild:blayer z:1];
这个对象是 add到ALayer的parent里面,所以它跟ALayer的对象是兄弟关系,而不是ALayer的child.
然后,我在ALayer的dealloc 中,尝试去释放这个不是自己的childe的成员:
if (blayer)
{
[blayer removeFromParentAndCleanup:YES];
blayer = nil;
}
这个时候可能会导致crash发生,因为在parent发生析构调用dealloc的时候,可能会先调用blayer的析构,然后再去
调用alayer的析构,而在运行到我们的代码的时候,blayer已经被析构,但是指针还在,所以会再次析构,这个时候重复析构就出错了。
所以,这这种情况下,不应该调用blayer的析构了,而是让parent去默认析构掉它。
从根本上来说,也许一开始就不应该在ALayer的内部创建一个不是自己child的 BLayer对象。以后慎重考虑这种方式。