1)
SKSpriteNode *node = [[SKSpriteNode alloc] initWithImageNamed:image];
2)
node = [SKSpriteNode spriteNodeWithImageNamed:@"image"];
我已经看过两种方式的代码示例,我不确定什么是最好的,为什么。在1)情况下,“alloc”代表什么?
答案 0 :(得分:1)
第一个声明变量node
并使用名为image
的变量:
SKSpriteNode *node = [[SKSpriteNode alloc] initWithImageNamed:image];
^^^^^^^^^^^^^^ ^^^^^
第二个假定变量node
已经存在,并使用字符串文字:
node = [SKSpriteNode spriteNodeWithImageNamed:@"image"];
^^^^^^^^
假设您正在使用自动引用计数或“ARC”(几乎可以肯定),在使用[[SKSpriteNode alloc] initWithImageNamed:...]
和使用[SKSpriteNode spriteNodeWithImageNamed:]
之间没有显着差异。
如果您在项目或此源文件中禁用了ARC,则不同之处在于alloc/init...
会返回+1引用,您必须release
或autorelease
在某些时候,spriteNodeWithImageNamed:
会返回一个自动释放的引用,如果你想保留它,你必须retain
。如果您想了解有关Cocoa手动内存管理的更多详细信息,请先阅读Cocoa Core Competencies: Memory management。