所以在我的一个Objective C课程中,我有一个强大的属性说:
@property(nonatomic, strong) NSMutableArray *tags;
以下哪项是初始化此属性的更好方法
1 self.tags = [[NSMutableArray alloc] init];
或
2 self.tags = [NSMutableArray array];
答案 0 :(得分:3)
使用ARC,几乎没有区别。 [NSMutableArray array]
返回一个"unretained
return value",它可能已被放入自动释放池中(实际发生了这种情况
在您的示例中,您可以通过检查生成的Assembler代码来查看。
当前自动释放池结束时,此附加引用将在稍后发布。 所以第二种方法有一点点开销。
另一方面,Objective-C 运行时有各种方法可以避免不必要的 保留/释放调用(例如通过检查调用堆栈),因此差异可以忽略不计。
答案 1 :(得分: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;