2011-11-16 3 views
1

가능한 중복 :
Is it better to autorelease or release right after?또 다른 아이폰 OS 메모리 관리 설명

(앞으로주의 : ARC의 관점에서이 주제를 논의하지 마십시오)

우리 회사는 내부 토론을 가지고 있으며 주제는 자동 출시/초기 릴리스의 사용법입니다. 내가 설명 할께.

시나리오 1 :

self.myRetainingProperty = [NSArray array]; // or [[[NSArray alloc] init] autorelease]; 

기본적으로 두 경우 모두 완벽하게 좋아, 그러나 나는 이러한 시나리오를 사용하는 지역 사회 '접근 무엇 호기심 것 : 2

NSArray *tempArray = [[NSArray alloc] init]; 
self.myRetainingProperty = tempArray; 
[tempArray release]; 

시나리오? 나는 가능한 한 빨리 "릴리스"(시나리오 1)를 선호합니다 - 특히 메모리가 소중한 iOS의 경우, 다른 한편으로는 다음 runloop주기가 지나치게 길지 않을 때 자동 복구 된 객체 (시나리오 2)가 좋습니다 메모리 사용량에 대한 스트레스.

제 질문은 당신이 선호하는 것이거나 애플이 권장하는 방식입니까?

그리고 다시 한번 :의 순간 :)에 대한 ARC를 무시 주시기 바랍니다 ...

감사합니다.

+1

불변의 빈 배열을 생성하기 때문에 두 예제가 모두 무의미하다는 것을 무시할 수 있습니까? ;) – jrturton

+1

많은 질문 - http://stackoverflow.com/search?q=release+vs+autorelease – beryllium

답변

0

꽤 자주 당신이 불변의 객체에 대해 이것을 사용하지만, NSMutableArray의 경우 다른 것입니다.

NSMutableArray *myList = [[NSMutablearray alloc] init]; 
Someobject *myObject = [[Someobject alloc] init]; 
[myList addObject:myObject]; 
[myObject release]; 
[self setList:myList]; 
[myList release]; 

나는 종종 위와 같이 사용합니다. iPhone/iPad에서 메모리 양이 제한되어있을 때 가능한 한 빨리 사용하지 않는 메모리를 정리하는 것이 좋은 습관이라고 생각합니다. 사용할 수있는 다른 옵션이 없을 때만 autorelease를 사용합니다.

-1

기본적으로 메모리 관리에 대한 질문 일뿐입니다.

하나의 단순한 개체를 할당하는 경우에는 autorelease를 확인해야합니다. 나는 1KO의 메모리가 당신의 앱에 비판적이지 않아야한다고 생각한다.

하지만 많은 양의 메모리를 사용하는 객체를 할당하거나 작은 메모리를 사용하는 많은 객체를 루프에 할당하면 가능한 한 빨리 해제하는 것이 좋습니다. 그렇지 않은 경우 성능 문제가 발생할 수 있으며 앱의 didReceiveMemoryWarning 메소드 (및 그 결과)가 최상의 경우에 더 자주 호출됩니다. 응용 프로그램을 최적화 ... 또는 다음 조기 석방 실행 루프 내에서 여러 번 작업을 수행하는 경우

-1

:-) 개발자를 최적화 방지하는 것이 바람직하다 :

모든 것은 당신이 원하는 최적화의 종류에 따라 달라집니다 큰 autorelease 수영장 건물. 그렇지 않으면 차이가 없으며 개인적인 취향에 따라 다릅니다.

너무 많은 중첩 대괄호를 피하기 위해 개인적으로 초기 릴리스 캠프에 있습니다.

1

메모리 사용량은 동일합니다. 유일한 차이점은 Autorelease 풀의 크기입니다. 속성에 할당 할 때 개체는 release 때 할당 해제되지 않습니다. 따라서 메모리 차이의 차이는 자동 해제 풀에 항목을 저장하는 것입니다. autorelease 풀에는 약간의 오버 헤드가 있지만 이러한 유형의 경우에는 대개 무시할 수 있습니다. 자연스럽고 코드를 읽기/유지하기가 쉬운 점이 무엇인지 생각해야합니다.