如何解决重用局部变量及其对内存的影响
| 当我有需要的方法时,常常出于便利 为了不同的目的重用相同的局部变量,我倾向于这样做:NSMutableArray *mutArray = [NSMutableArray arrayWithObjects: @\"one\",@\"two\",nil];
[self fooWithArray:mutArray];
mutArray = [NSMutableArray arrayWithObjects: @\"three\",@\"four\",nil];
[self barWithArray:mutArray];
//and
MyClass *myClass = [[MyClass alloc]initWithString:@\"one\"];
self.oneClass = myClass;
[myClass release];
myClass = [[MyClass alloc]initWithString:@\"two\"];
self.twoClass = myClass;
[myClass release];
从内存角度来看,这是正确的做法吗?
此代码是否容易发生内存泄漏?
解决方法
使用对象之前,不必将对象分配给变量。我能看到的唯一原因是冗长,但这不是必需的。
您可以摆脱:
[self fooWithArray:[NSMutableArray arrayWithObjects: @\"one\",@\"two\",nil]];
[self barWithArray:[NSMutableArray arrayWithObjects: @\"three\",@\"four\",nil]];
//and
self.oneClass = [[[MyClass alloc]initWithString:@\"one\"] autorelease];
self.twoClass = [[[MyClass alloc]initWithString:@\"two\"] autorelease];
,NSMutableArray *mutArray = [NSMutableArray arrayWithObjects: @\"one\",nil];
[self fooWithArray:mutArray];
第一条语句返回一个自动释放的对象,因此您不释放它们将不会导致任何内存泄漏。尝试发布实际上会使应用程序崩溃。
MyClass *myClass = [[MyCalss alloc]initWithString:@\"one\"];
self.oneClass = myClass;
[myClass release]
假定您已声明一个带有保留属性的oneClass,第二行将引用计数增加到2。现在,当您像在第三行中一样释放myClass时,必须小心在方法dealloc中释放oneClass,因为引用计数是[myClass release]
之后仍为1。
您还可以参考此答案,在该答案中他巧妙地描述了内存管理。
,好问题。
就内存而言,不会有任何问题,因为您正在释放分配的内存。但是,恐怕不是一个好习惯。
您正在做的事情是这样的:
MyClass *myClass; // in .h
因为您两次使用同一对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。