2011-05-26 50 views
1

进出方便经常当我有一个方法,我需要 重用为不同的目的我倾向于做这样的事情在同一个本地变量:重新使用局部变量和影响内存

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]; 

内存 - 明智的,这是正确的做法吗? 这段代码容易发生内存泄漏吗?

回答

1

在使用它们之前,您不必为变量指定对象。我能看到这样做的唯一原因是冗长,但这不是必需的。

你可以逃脱:

[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]; 
0
NSMutableArray *mutArray = [NSMutableArray arrayWithObjects: @"one", @"two", nil]; 
[self fooWithArray:mutArray]; 

第一个语句返回一个自动释放的对象,因此您不释放它们不会导致任何内存泄漏。尝试释放实际上会使应用程序崩溃。

MyClass *myClass = [[MyCalss alloc]initWithString:@"one"]; 
self.oneClass = myClass; 
[myClass release] 

假设你有oneClass有保有财产申报,第二行增加了引用计数为2。现在,当你松开myClass的,你在第三行做护理,必须采取释放oneClass您方法dealloc作为参考计数在[myClass release]之后仍然为1。

你也可以参考this answer,他整齐地描述了内存管理。

0

伟大的问题。
就内存而言,不会有任何问题,因为你释放分配的内存。但我担心,这不是一个好习惯。
你在做什么是这样的:

MyClass *myClass; // in .h 

,因为你使用的是同一个对象两次。