有人可以 ELI5 这两行代码之间的区别吗?

Can someone ELI5 the difference between these two lines of code?

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

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

我看过使用这两种方式的代码示例,但我不确定哪种方式最好以及为什么。 "alloc" 在 1) 的情况下究竟代表什么?

第一个声明变量 node 并使用名为 image:

的变量
SKSpriteNode *node = [[SKSpriteNode alloc] initWithImageNamed:image];
^^^^^^^^^^^^^^                                                ^^^^^

第二个假设变量 node 已经存在,并使用字符串文字:

node = [SKSpriteNode spriteNodeWithImageNamed:@"image"];
                                              ^^^^^^^^

假设您正在使用自动引用计数或“ARC”(您几乎可以肯定是),使用 [[SKSpriteNode alloc] initWithImageNamed:...] 和使用 之间没有显着差异 =16=].

如果您在您的项目中或对于此源文件禁用了 ARC,那么不同之处在于 alloc/init... returns 您必须 releaseautorelease 在某些时候,而 spriteNodeWithImageNamed: returns 一个自动发布的引用,如果你想保留它,你必须 retain 。如果您想了解有关 Cocoa 中手动内存管理的更多详细信息,请先阅读 Cocoa Core Competencies: Memory management