Ios 使用类助手方法创建可变对象或使用ARC创建可变复制

Ios 使用类助手方法创建可变对象或使用ARC创建可变复制,ios,objective-c,copy,automatic-ref-counting,Ios,Objective C,Copy,Automatic Ref Counting,据我所知,使用辅助方法(如arrayWithArray)创建NSMutableArray)会将数组和可变数组添加到当前的自动释放池中。使用mutableCopy,将要复制的数组添加到自动释放池中,但生成的NSMutableArray没有。没有弧,这是一个显著的区别 但是,当使用ARC时,除了上面描述的内容之外,还有什么与ARC无关的区别吗?我见过两种方法都使用的代码。在启用ARC时,是否有关于如何创建不可变对象的可变版本的既定最佳实践?为什么会这样?因为arrayWitharray在当前自动释放

据我所知,使用辅助方法(如
arrayWithArray
)创建
NSMutableArray
)会将数组和可变数组添加到当前的自动释放池中。使用
mutableCopy
,将要复制的数组添加到自动释放池中,但生成的
NSMutableArray
没有。没有弧,这是一个显著的区别


但是,当使用ARC时,除了上面描述的内容之外,还有什么与ARC无关的区别吗?我见过两种方法都使用的代码。在启用ARC时,是否有关于如何创建不可变对象的可变版本的既定最佳实践?为什么会这样?

因为arrayWitharray在当前自动释放池中添加了两个对象,但后者没有。因此,由于自动释放池的排放,第一个的性能稍差。因此,请使用下面的后一种方法。将arc或非arc中的不可变数组转换为可变数组的简单且最佳的方法:-

  NSMutableArray *array=[yourArray 
  mutableCopy];

但为什么这是最好的方式呢?为什么不使用arrayWithArray?遵循这一点,这不一定是正确的,因为ARC下返回的自动释放对象可能不会添加到自动释放池中。@HussainShabbir,我已经看到了这个问题,但对于什么是最佳做法以及为什么这样做没有明确的答案。除非您有性能问题,否则不要担心。如果没有评测,您就无法判断哪种方法更好。