1

我对使用 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”关键字和“mutableCopy”属性(如第一个示例)对我来说似乎是重复的。我错了吗?谢谢!

4

1 回答 1

2

强大的属性是要使用的。因为它是一个可变对象(并且被声明为这样),所以你不会想要复制,因为那样的话[self.myArray addObject:object]就行不通了。您可以copy为不可变对象使用属性,这些对象可能传入了可变版本(因此 NSString 通常是复制属性)。

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

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

于 2013-04-27T09:18:24.027 回答