Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS";“复制”;可变对象上的关键字_Ios - Fatal编程技术网

iOS";“复制”;可变对象上的关键字

iOS";“复制”;可变对象上的关键字,ios,Ios,我在理论上对iOS(我认为还有MacOSX)中使用ARC声明可变对象的两种类型表示怀疑 在类扩展中声明NSMutableArray与下面的代码有什么区别: @interface MyViewController () @property (copy) NSMutableArray* myMutableArray; @end //Class implementation @implementation MyViewController ... - (void)viewDidLoad {

我在理论上对iOS(我认为还有MacOSX)中使用ARC声明可变对象的两种类型表示怀疑

在类扩展中声明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用于具有可变/不可变对的类集群中的类。因此,在这种情况下,这似乎是正确的选择。但是使用“copy”关键字和“mutableCopy”属性(如第一个示例)对我来说似乎是重复的。我错了吗?
谢谢

强属性就是要使用的属性。因为它是一个可变对象(并且被声明为可变对象),所以您不需要复制,因为像
[self.myArray addObject:object]
这样的事情就不起作用了。对于可能传入可变版本的不可变对象,可以使用
copy
属性(因此NSString通常是一个copy属性)

数组的分配方式(使用objective-c文本创建空数组的可变副本)非常笨拙,最好写为
self.myMutableArray=[NSMutableArray]


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

谢谢您的解释。然而,随着文字的引入,我经常看到这样的声明:
self.myMutableArray=[@[@[@“一”、@“二”、@“三”]mutableCopy]对,因为文本是不可变的,所以这会创建它的可变副本。是的,这对于包含某些内容的文本数组是有意义的,但对于空数组则没有意义。