我已经创建了一个数组来放入我的spriteFrame,当然,我试图在我使用它之后释放数组,所以它不会泄漏,但每当我把它放在我的所有代码下面时,我的应用程序崩溃了,我获取错误访问错误代码1.这是我试图释放它的方式:
-(void)moveHair {
NSMutableArray *animateHair = [NSMutableArray arrayWithCapacity:10];
for (int i = 1; i < 10; i++) {
NSString *animHair = [NSString stringWithFormat:@"wRightLong%i.png", i];
CCSpriteFrame *whiteFrame = [frame spriteFrameByName:animHair];
[animateHair addObject:whiteFrame];
}
CCAnimation *blowHair = [CCAnimation animationWithSpriteFrames:animateHair delay:0.15];
CCAction *blowingHair = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:blowHair]];
[white runAction:blowingHair];
[animateHair release];
animateHair = nil;
}
为什么我会收到该错误,如何解决?
答案 0 :(得分:1)
如果您使用ARC,则无需担心保留和释放等问题。删除[animateHair release];
答案 1 :(得分:1)
您不需要最终版本。删除这些行:
[animateHair release];
animateHair = nil;
原因是您创建了这样的数组:
NSMutableArray *animateHair = [NSMutableArray arrayWithCapacity:10];
在这种情况下,NSMutableArray
的{{1}}方法会返回arrayWithCapacity:
个对象。
(通过再次释放它,你实际上是通过autoreleased
对象释放保留的数组...因此,下次它尝试访问数组时,你会收到“Bad Access”异常。)
注意:
通常,大多数CCAnimation
和NS
类从类便捷创建方法返回UI
个对象。例外情况是该方法中包含单词autoreleased
或new
。
您可以使用ARC(自动保留计数)来改善您的生活。但是,在我看来,了解内存管理的工作原理对于成为Objective-C的高级开发人员非常重要。以下是Ray Wenderlich网站的教程,如果您有兴趣:
http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial