因此,在我的一个 Objective C 类中,我有一个强大的属性说:
@property(nonatomic, strong) NSMutableArray *tags;
以下哪项是初始化此属性的更好方法
1self.tags = [[NSMutableArray alloc] init];
或者
2self.tags = [NSMutableArray array];
因此,在我的一个 Objective C 类中,我有一个强大的属性说:
@property(nonatomic, strong) NSMutableArray *tags;
以下哪项是初始化此属性的更好方法
1self.tags = [[NSMutableArray alloc] init];
或者
2self.tags = [NSMutableArray array];
使用 ARC,几乎没有区别。[NSMutableArray array]
返回一个“未保留的返回值”,它可能已被放入自动释放池(这实际上发生在您的示例中,您可以通过检查生成的汇编程序代码看到)。
当当前自动释放池结束时,此附加引用将在稍后发布。所以第二种方法有一点开销。
另一方面,Objective-C运行时有多种方法来避免不必要的保留/释放调用(例如通过检查调用堆栈),因此差异可能可以忽略不计。
这取决于你对更好的定义。首先,如果您在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;