Mutable对象上的iOS“copy”关键字

时间:2013-04-27 09:08:11

标签: ios

我对使用ARC的iOS中的可变对象(以及我认为的MacOSX)的两种声明对象进行了理论上的质疑。

在类扩展中声明NSMutableArray之间的区别是什么,如下面的代码:

@interface MyViewController ()

@property (copy) NSMutableArray* myMutableArray;

@end 

//Class implementation
@implementation MyViewController
...
- (void)viewDidLoad
{
    _myMutableArray = [@[] mutableCopy];
}

以这种方式声明相同的数组

@interface MyViewController ()

@property (nonatomic, strong) NSMutableArray* myMutableArray;

@end 

//Class implementation
@implementation MyViewController
...
- (void)viewDidLoad
{
    _myMutableArray = [@[] mutableCopy];
}

哪一个更好?我已经看过两个版本,显然两者都运行良好。但是,我想知道哪一个是最好的选择。 我知道" copy"关键字是对包含可变/不可变对的类集群的一部分的类使用副本。所以在这种情况下,它似乎是正确的选择。但使用" copy"关键字和" mutableCopy"属性(就像第一个例子)似乎与我重复。我错了吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

强大的财产是使用的。由于它是一个可变对象(并且被声明为这样),所以你不会想要复制,因为那时[self.myArray addObject:object]之类的东西不起作用。您可以使用copy属性来处理可能传入可变版本的不可变对象(因此NSString通常是一个复制属性)。

分配数组的方式(使用objective-c文字制作一个空数组的可变副本)非常笨拙,最好写成self.myMutableArray = [NSMutableArray array];

另外,不要直接访问实例变量,请使用属性访问器。