ELI5可以将这两行代码区别开来吗?

时间:2015-04-05 18:17:17

标签: objective-c sprite-kit

1)
SKSpriteNode *node = [[SKSpriteNode alloc] initWithImageNamed:image];

2)
node = [SKSpriteNode spriteNodeWithImageNamed:@"image"];

我已经看过两种方式的代码示例,我不确定什么是最好的,为什么。在1)情况下,“alloc”代表什么?

1 个答案:

答案 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引用,您必须releaseautorelease在某些时候,spriteNodeWithImageNamed:会返回一个自动释放的引用,如果你想保留它,你必须retain。如果您想了解有关Cocoa手动内存管理的更多详细信息,请先阅读Cocoa Core Competencies: Memory management