2012-09-12 3 views
0

친애하는 동료 아이폰 OS 개발자가할당 된 개체를 할당하여 속성을 유지하는 가장 좋은 방법은 무엇입니까?

나는 아직도 ARC (곧 전환)없이와 아이폰 OS 초보자와 흥미로운 토론 후 개발하고 있어요, 나는 유지 속성을 초기화하는 길을 제시했습니다 (의이 property를 호출하자) 나는 그들의 사전 ARC 시대에 애플의 문서에서 상속 것을 :

NSObject *tmpProperty = [[NSObject alloc] init]; 
self.property = tmpProperty; 
[tmpProperty release]; 

나는이 가진 큰 혜택을 볼 : 그것은 메모리 관리 분명합니다.

큰 단점도 있습니다. 아주 기본적인 것이기 때문에 3 줄이 필요합니다. 그래서 우리는 다음과 같은 가정을했습니다.

self.property = [[[NSObject alloc] init] autorelease]; 

메모리 관리에 대해서는 덜 분명하지만 훨씬 더 간결합니다 (또한 ARC 마이그레이션을 쉽게 수행 할 수있게 해줍니다).

본인이 사용하고있는 것은 무엇입니까? 이들 중 하나가 다른 것보다 더 나은 해결책이라고 생각하십니까?

답변

0

당신이 초기화 된 개체의 수명을 통제 할 수 없기 때문에 오토 릴리즈는 최고의 선택이 결코 사용, 그래서 당신은 예를 들어, 어떤 객체를 초기화 가지고의 ViewController에서

하는 경우가 있습니다 속성을 가지고 있으며, 다른 뷰로 전환하고 있으며 이전 버전의 ViewController로 돌아가서 객체에 액세스하려면 iOS에서이를 릴리스 할 수 있으며 앱이 다운 될 수 있습니다.

내가 가장 일 때 ARC로 전환하면 이 최선의 선택이라고 생각합니다. ARC는 모든 개발자가 사용해야한다고 생각합니다. 거의 모든 기기가 iOS5 업데이트에 의해 제공되고 있으므로 구형 기기를 지원할 가능성은 거의 없습니다.

희망 사항이 문제를 해결하려면

+0

올바르게 관리하면 objc의 메모리 관리가 결정적입니다. autorelease를 사용하면이 변경되지 않습니다 –

+0

[Apple Docs] (https://developer.apple.autorelease를 사용하여 메모리를 사용하는 방법은 com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html # // apple_ref/doc/uid/20000043-1000922) –

+0

어디서나 autorelease가 피해야한다고 언급 한 곳을 볼 수 없습니다. –

0

적은 메모리를 사용하므로 어디에서나 사용할 수 있습니다. 두 번째 경우에는 할당 된 객체가 실행 루프가 완료 될 때 해제됩니다. 이 코드는 for 루프 또는 테이블 뷰 셀에있을 때 중요 할 수 있습니다. 상황에 따라 '메모리 경고'와 '모든 것이 좋습니다'의 차이를 만들 수 있습니다.

길 : ARC로 전환하십시오.

0

약간 모두. 국제 대회가 "하나 또는 다른"이라고 말해야한다고 생각하지 않습니다.

한 줄이면 한 줄짜리가 잘 작동합니다. 소유권은 추가로 읽을 필요가 없습니다.

초기화가 더 필요하거나 (예 : self.property으로 설정하기 전에) 또는 경우에 따라 자동 풀 또는 추가로 예측할 수있는 객체를 추가 할 가능성을 최소화하려는 경우 두 번째를 선호 할 수 있습니다.

그러나 ARC로 옮겨 가려한다면 많은 걱정을하지 않을 것입니다. 많은 변화가있을 것이므로 마이그레이션 후에 추가 작업을하지 않을 수도 있습니다.

관련 문제