【问题标题】:Instantiation of NSMutableArray in Obj-C 2.0 [duplicate]在 Obj-C 2.0 中实例化 NSMutableArray [重复]
【发布时间】:2014-07-03 10:43:38
【问题描述】:

在风格或效率方面,NSMutableArray *myArray = [[NSMutableArray alloc] init];NSMutableArray *myArray = [NSMutableArray new]; 更正确还是更不正确?

【问题讨论】:

  • 两者功能相同。 new 可能没有得到充分利用,主要是出于习惯(还有一点恐惧)。

标签: ios objective-c


【解决方案1】:

其实两者都是用来初始化新对象的。 new 也会执行 allocateinitialize。但是苹果建议先调用alloc,再调用init方法。这就是为什么我们使用[[NSMutableArray alloc] init]

反正这里没什么大区别

【讨论】:

  • 即使您使用的是newalloc 会先做然后才初始化它。其实两者都是一样的
【解决方案2】:

两者都不是“更正确的”,实际上它们在功能上是等效的,但allocnew 更常见,因为自定义初始化总是通过initWith... 风格的方法完成。所以很难说某些东西在风格上是正确,但new 在现代Objective-C 中的风格上肯定不那么标准

【讨论】:

  • 这应该是公认的答案。现代目标 C 更喜欢 new,除非您不应该使用任何自定义初始化程序,例如 initWith..
  • 实际上苹果在去年的 WWDC 或前一年说过 new 是一种已弃用的风格。新类几乎没有 new 方法,Apple 强烈不鼓励您在自己的类中提供它们,他们甚至给出了不应使用它们的技术原因,但我不记得它是什么。
  • @Mecki:new 确实是旧风格。 new 是过去 Objective-C 更倾向于 Smalltalk 方向时的做法。但是,“新类几乎没有new 方法”这句话并不是完全正确的。它们继承了NSObject的new,就像所有其他类一样,相当于alloc+init。如果你可以写[[SomeNSObjectSubclass alloc] init],你可以写[SomeNSObjectSubclass new]。它没有被标记为已弃用;它只是在风格上不标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多