0

因此,在我的一个 Objective C 类中,我有一个强大的属性说:

@property(nonatomic, strong) NSMutableArray     *tags;

以下哪项是初始化此属性的更好方法

1self.tags = [[NSMutableArray alloc] init];

或者

2self.tags = [NSMutableArray array];

4

2 回答 2

3

使用 ARC,几乎没有区别。[NSMutableArray array]返回一个“未保留的返回值”,它可能已被放入自动释放池(这实际上发生在您的示例中,您可以通过检查生成的汇编程序代码看到)。

当当前自动释放池结束时,此附加引用将在稍后发布。所以第二种方法有一点开销。

另一方面,Objective-C运行时有多种方法来避免不必要的保留/释放调用(例如通过检查调用堆栈),因此差异可能可以忽略不计。

于 2013-09-17T11:22:45.747 回答
0

这取决于你对更好的定义。首先,如果您在init方法中,则根本不应该self.tags =用于赋值,因为您不应该从方法中调用init方法。相反,直接访问实例变量:

_tags = ...;

至于可能的方法:

_tags = [[NSMutableArray alloc] init];

目前比

_tags = [NSMutableArray array];

但也更长。我们永远不应该针对我们没有测量的性能问题进行优化。如果您想要可读性和短代码,我会建议第三种选择:

_tags = [NSMutableArray new];

事实上,您可以编写更短的代码,但这可能会让您流血:

_tags = [@[] mutableCopy];

额外的轨道:在 ARC 早期,对象属性的默认值是,但它很快assign就改变了。strong所以而不是

@property(nonatomic, strong) NSMutableArray *tags;

你可以使用

@property(nonatomic) NSMutableArray *tags;
于 2013-09-19T13:43:54.143 回答