有人可以 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 您必须 release
或 autorelease
在某些时候,而 spriteNodeWithImageNamed:
returns 一个自动发布的引用,如果你想保留它,你必须 retain
。如果您想了解有关 Cocoa 中手动内存管理的更多详细信息,请先阅读 Cocoa Core Competencies: Memory management。
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 您必须 release
或 autorelease
在某些时候,而 spriteNodeWithImageNamed:
returns 一个自动发布的引用,如果你想保留它,你必须 retain
。如果您想了解有关 Cocoa 中手动内存管理的更多详细信息,请先阅读 Cocoa Core Competencies: Memory management。