2011-05-26 61 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 

,因爲你使用的是同一個對象兩次。