0

我有一个名为的自定义类Hexagon,它是NSObject. 但是,当我将它分配给精灵并通过调用将其添加到屏幕时-addChild:,它的保留计数为 2!为了阻止泄漏,我应该怎么做?

 for (int i =0; i < HEXCOUNT; i++){
        Hexagon *nHex = [[Hexagon alloc]initWithDicitonary:hexPositions];
        CCSprite *theSprite = (CCSprite*)nHex;
        NSString *hexName = [NSString stringWithFormat:@"hexagon%d", i];
        CGPoint location = CGPointFromString([[EXHEXAGONS objectForKey:hexName]objectForKey:@"position"]);
        CGPoint nLocation = ccp(screenSize.width/2 + 68 * location.x,screenSize.height/2 + 39 * location.y);
        theSprite.position = nLocation;

        [self addChild:theSprite z:1 tag:i];

        NSMutableDictionary *hexProperties = [EXHEXAGONS objectForKey:hexName];
        [hexProperties setObject:theSprite forKey:@"realSprite"];
        [EXHEXAGONS setObject:hexProperties forKey:hexName] ;
        [[GameStateSingleton sharedMySingleton]setExistingHexagons:EXHEXAGONS];

    [nHex release];

    }
4

2 回答 2

4

不要依赖retainCount 做任何事情。retainCount 为 2 并不意味着对象正在泄漏。只有 Instruments 可以告诉你。

使用 alloc/init 创建 Hexagon 对象将增加保留计数 +1。将其添加为子项将添加 +1。因此,根据您记录retainCount 的位置,它可能是正确的。

如果您担心内存泄漏,请务必开始使用 ARC

于 2012-05-27T20:33:35.687 回答
1

首先,担心保留计数是没有效率的,除非您验证它在从所有保留它的各种对象中完全释放时没有被释放。

其次,大概您将对象放入 a NSArray,NSSetNSDictionarywithin addChild:z:tag:? 所以,这会使它的保留计数增加一。

您还将Hexagon对象转换为 aCCSprite并将其添加到NSDictionary hexProperties,这将为您的保留计数增加另一个 1。

当您release的对象位于循环底部时,您的保留计数将至少为3。之后release它应该至少为2。

于 2012-05-27T20:42:01.057 回答