重用局部变量及其对内存的影响

问题描述

| 当我有需要的方法时,常常出于便利 为了不同的目的重用相同的局部变量,我倾向于这样做:
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  
因为您两次使用同一对象。