2011-03-02 3 views
1

할당 :이유는 간단 할 수 없습니다 바르

self.list = [[NSArray alloc] initWithObjects: @"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil]; 

대신 :

NSArray *array = [[NSArray alloc] initWithObjects:@"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil]; 
self.list = array; 
+1

당신은 왜 당신은 당신이 할 수없는 생각을 할 수 있는가? – robertvojta

답변

2

게시 한 두 가지 방법 모두가 누출됩니다. list이 같은 속성으로 선언되어 있다고 가정

... 그럼 우리가 유지 될 것으로, self.list = xxx를 사용하여 합성 세터를 통해 목록을 설정하고있는 경우의 수를 유지하는 것을 알고

@property (nonatomic, retain) NSArray *list; 

1. 또한 ALLOC/초기화를 호출하여, 우리가 ... 이런 식으로, 메모리 안전한 방법으로

self.list = [[[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil] autorelease]; 

또는

당신의 두 가지 접근 방법을 다시 수 있다고 말했다 데 2로 다시 요동을 유지

self.list = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];

또는

NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil]; 
self.list = array; 
[array release]; 
+0

그냥 nitpick - retain/init 때문에 retain 수는 1이 될 것이고 retain은 보유 속성 때문에 2가 될 것입니다. 너는 그것을 뒤로 말했다. – Richard

+0

나는 그것을 깨닫는다. 왼쪽에서 오른쪽으로 읽는 것 같이 나는 그냥 따라 가고있었습니다. –

4

사실 당신이 할 수 있습니다. 목록 속성이 유지로 선언한다면 당신은 이런 식으로 할 필요가 :

self.list = [[[NSArray alloc] initWithObjects: @"Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil] autorelease]; 

또는 짧은 :

self.list = [NSArray arrayWithObjects: "Who Hash", @"Bubba Gump Shrimp Étouffée", @"Who Pudding", @"Scooby Snacks", @"Everlasting Gobstopper", @"Green Eggs and Ham", @"Soylent Green", @"Hard Tack", @"Lembas Bread", @"Roast Beast", @"Blancmange", nil]; 

그렇지 않으면 당신은 누수를 얻을 수 있습니다.