我只是好奇ARC编译是否优化了内存性能,例如:
1| - (void)setName:(NSString *)name
2| {
3| _name = name;
4| if([name isEqualToString:@"Name"])
5| NSLog(@"%@", @"It's Equal!");
6| }与第二次在第4行中不使用局部变量的细微差别
1| - (void)setName:(NSString *)name
2| {
3| _name = name;
4| if([_name isEqualToString:@"Name"])
5| NSLog(@"%@", @"It's Equal!");
6| }在第二个示例中只为一个分配给_name的内存中只保留本地_name变量,然后释放它,这样才能优化内存性能,还是将name保存在内存中,直到两个示例的方法完成为止?希望我的问题有意义。
发布于 2015-08-03 23:42:29
两组代码的唯一不同之处在于if语句中使用的变量。这种微小的差异对name分配给_name完全没有影响。内存管理在两组代码之间没有什么不同。
在这两组代码中,_name = name;行本质上变成(在ARC下):
if (_name != name) {
[_name release];
_name = [name retain];
}您的if语句及其使用的变量与该代码完全无关。
记住,name是由任何代码调用的setName:方法“拥有”的。setName:方法永远不会尝试释放name。指向为name的对象将通过保存对它的引用而保存在内存中。
https://stackoverflow.com/questions/31797860
复制相似问题