Objective c Cocos2d何时保留对象?
查看以下代码:Objective c Cocos2d何时保留对象?,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,查看以下代码: CCSprite* testsprite = [CCSprite spriteWithFile:@"test.png"]; CCLOG(@"1. count: %d", [testsprite retainCount]); [self addChild:testsprite]; CCLOG(@"2. count: %d", [testsprite retainCount]); [testsprite runAction: [CCMoveTo
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),是否有经验法则
再见,Christian与任何其他Cocoa代码一样:当你需要保留一些东西时,保留它。完成后释放它
还有,retainCount
方法
CCSprite *sprite = [CCSprite spriteWithFile:@"icon.png"];
手动内存管理
CCSprite *sprite = [[CCSprite alloc] initWithFile:@"icon.png"];
不要让重新计算使你困惑。每行代码都可能保留该对象。如果做得好,底层代码将在完成后自动释放它
必须键入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
}
NSMutableArray*单位=[NSMutableArray];
对于(int i=0;i<42;i++)
{
CCNode*unit=[[MyUnit alloc]init];//保留+1
[units addObject:unit];//保留+1
[单元释放];//保留-1
}
谢谢您的回复。还有一个问题:如果——在您的最后一个代码片段中——我稍后会调用[units release],这将释放该数组以及分配给该数组的所有对象(CCNodes)?是的,如果您释放该数组,它将释放其全部内容。所有MyUnits在[units release]之后被解除分配;不要为自己担心。获取对象时保留它,完成后释放它。如果每个人都做好自己的工作,就不会有问题了。