对于使用ARC的iOS(以及MacOSX我认为)中的两种可变对象声明,我有理论上的疑问。关于可变对象的iOS“复制”关键字
什么是一个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”关键字和“mutableCopy”属性(如第一个示例)对我来说似乎是重复的。我错了吗? 谢谢!
感谢您的解释。然而,随着文字的引入,我经常看到这样的声明: 'self.myMutableArray = [@ [@“One”,@“Two”,@“Three”] mutableCopy];' – nicopasso 2013-04-27 09:32:12
正确的,因为文字是不可变的,这会创建一个可变的副本。 – 2013-04-27 12:53:13
是的,它对于一个包含某些东西的文字数组是有意义的,但对于一个空的数组并不适用。 – jrturton 2013-04-27 14:25:00