首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标-C ARC次要性能

目标-C ARC次要性能
EN

Stack Overflow用户
提问于 2015-08-03 22:36:04
回答 1查看 31关注 0票数 1

我只是好奇ARC编译是否优化了内存性能,例如:

代码语言:javascript
复制
1| - (void)setName:(NSString *)name
2| {
3|    _name = name;
4|   if([name isEqualToString:@"Name"])
5|       NSLog(@"%@", @"It's Equal!");
6| }

与第二次在第4行中不使用局部变量的细微差别

代码语言:javascript
复制
1| - (void)setName:(NSString *)name
2| {
3|    _name = name;
4|   if([_name isEqualToString:@"Name"])
5|       NSLog(@"%@", @"It's Equal!");
6| }

在第二个示例中只为一个分配给_name的内存中只保留本地_name变量,然后释放它,这样才能优化内存性能,还是将name保存在内存中,直到两个示例的方法完成为止?希望我的问题有意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 23:42:29

两组代码的唯一不同之处在于if语句中使用的变量。这种微小的差异对name分配给_name完全没有影响。内存管理在两组代码之间没有什么不同。

在这两组代码中,_name = name;行本质上变成(在ARC下):

代码语言:javascript
复制
if (_name != name) {
    [_name release];
    _name = [name retain];
}

您的if语句及其使用的变量与该代码完全无关。

记住,name是由任何代码调用的setName:方法“拥有”的。setName:方法永远不会尝试释放name。指向为name的对象将通过保存对它的引用而保存在内存中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31797860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档