【问题标题】:What sense to copy empty array?复制空数组有什么意义?
【发布时间】:2015-06-17 07:49:56
【问题描述】:

我正在阅读另一个程序员的代码,所以我发现了这个:

@property(nonatomic, strong) NSArray *assets;
----
   _assets = [@[] mutableCopy];
    __block NSMutableArray *tmpAssets = [@[] mutableCopy];

这是某种诡计吗?为什么他使用 mutableCopy 到不可变数组 assets ?他为什么不直接创建它:

self.assets = [NSArray new];
__block NSMutableArray *tmpAssets = [NSMutableArray new];

?

【问题讨论】:

  • 仅仅因为 property assets 是不可变的,并不一定意味着支持它的 instance 变量 _assets 是不可变的.永远不要让任何属性具有可变类型是一种很好的做法。使用NSMutableArray* 实例变量支持可变索引集合属性很方便,但只允许通过indexed collection mutation accessors 对其进行变异。

标签: ios objective-c nsmutablearray nsarray nscopying


【解决方案1】:

只是获取空可变数组的简写。

[NSMutableArray alloc] init] 相比,它的代码要少一些 -

new 构造并没有真正被大多数 Objective-C 程序员使用,它是为了方便其他语言的新手而添加的。

注意@[] 将创建一个(不可变的)NSArray -
NSMutableArray 没有 Objective-C literal

【讨论】:

  • 对我来说,new[@[] mutableCopy]; 清晰得多,创建它然后复制它有什么意义?
  • 哦,我明白了 - @[] 创建了一个 NSArray!所以为了得到可变的对应物,你向它发送mutableCopy 消息。
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2012-08-07
  • 2011-11-10
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多