查看以下代码:
CCSprite* testsprite = [CCSprite spriteWithFile:@"test.png"];
CCLOG(@"1. count: %d", [testsprite retainCount]);
[self addChild:testsprite];
CCLOG(@"2. count: %d", [testsprite retainCount]);
[testsprite runAction: [CCMoveTo actionWithDuration:3.0 position:CGPointMake(200.0, 200.0)]];
CCLOG(@"3. count: %d", [testsprite retainCount]);
此代码的输出为:
1. count: 1
2. count: 2
3. count: 3
我想我明白这里发生了什么。问题如下:当Cocos2D保留对象(在这种情况下是testsprite)时(是哪种方法)有没有经验法则?
再见,基督徒答案 0 :(得分:2)
自动释放:
CCSprite *sprite = [CCSprite spriteWithFile:@"icon.png"];
手动内存管理
CCSprite *sprite = [[CCSprite alloc] initWithFile:@"icon.png"];
不要让retainCount迷惑你。每行代码都可能保留对象。如果运行良好,底层代码将在完成后自动释放。
必须键入release时的常见示例。
NSMutableArray *units = [NSMutableArray array];
for (int i = 0; i < 42; i++)
{
CCNode *unit = [[MyUnit alloc] init]; // retain +1
[units addObject:unit]; // retain +1
[unit release]; // retain -1
}
答案 1 :(得分:1)
The rule与任何其他Cocoa代码相同:在需要时保留一些内容。完成后释放它。
此外,retainCount
方法is generally useless。