我对使用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"属性(就像第一个例子)似乎与我重复。我错了吗? 谢谢!
答案 0 :(得分:2)
强大的财产是使用的。由于它是一个可变对象(并且被声明为这样),所以你不会想要复制,因为那时[self.myArray addObject:object]
之类的东西不起作用。您可以使用copy
属性来处理可能传入可变版本的不可变对象(因此NSString通常是一个复制属性)。
分配数组的方式(使用objective-c文字制作一个空数组的可变副本)非常笨拙,最好写成self.myMutableArray = [NSMutableArray array];
另外,不要直接访问实例变量,请使用属性访问器。