0

我将 CCSpriteBatchNode 子类化为一个符合 NSCoding 的对象。我主要对 CCSpriteBatchNode 的字符串名称感兴趣。设置断点后,我意识到对象的字符串名称始终为零。我有一种感觉,我的重写方法可能是一个促成因素,但我不太确定。请参阅下面的相关代码:

SpriteBatchNode 接口:

@interface SpriteBatchNode: CCSpriteBatchNode {
NSString* batchImageName;
}

SpriteBatchNode 实现:

const NSUInteger defCapacity = 29;

@implementation SpriteBatchNode

@synthesize batchImageName;

+(id)batchNodeWithFile:(NSString*) imageFile
{
return [[self alloc] initWithFile:imageFile capacity:defCapacity];
}

-(id)initWithFile:(NSString *)fileImage {
self = [super initWithFile:fileImage capacity:defCapacity];

if (!self) return nil;

batchImageName = fileImage;

return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder
{
NSString* spriteBatchNodeFileImage = [[aDecoder decodeObjectForKey:@"batchImageName"] copy];

self = [super initWithFile:spriteBatchNodeFileImage capacity:defCapacity];
if (!self) return nil;

return self;
}

-(void)encodeWithCoder:(NSCoder *)aCoder
{
   [aCoder encodeObject:batchImageName forKey:@"batchImageName"];
}

@end
4

1 回答 1

1

如果您不使用 ARC,我会在这里看到两个问题:

  • 不保留 batchImageName 字符串
  • batchNodeWithFile:没有向返回的实例发送自动释放

除了您使用不寻常的初始化样式之外,常见的样式是这样的:

if (self)
{
    batchImageName = fileImage;
}
return self;

检查 self 是否为 nil,如果是则返回 nil,这有点多余。

于 2013-11-16T13:19:28.740 回答