2011-08-25 2 views
1
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
cell.accessoryView = switchView; 
[switchView adTarget:selfaction:@selector(switchChanged:)forControlEvents:UIControlEventValueChanged]; 
[switchView release]; 

tableView : cellForRowAtIndexPath :에 스위치보기가 할당되었습니다. dealloc에서 cell.accessoryView를 릴리스해야합니까?accessoryView를 출시해야하나요?

위보다 좋지 않습니까?

cell.accessoryView = [[[UISwitch alloc] initWithFrame:CGRectZero]autorelease]; 

답변

0

cell.accessoryView을 설정하는 즉시 스위치를 해제 할 수 있습니다. 가능한 한 어디서나 메모리를 명시 적으로 해제해야한다는 점을 제외하고는 2 개의 코드 조각간에 많은 차이가 없습니다. 메서드에서 값을 반환해야하는 경우와 같이 Autorelease이 일반적으로 사용됩니다.

+0

그래서 [cell.accessoryView 릴리스]와 같이 dealloc을 릴리스해야합니까? – user698200

+0

아니요. 셀을 놓으면 자동으로 해제됩니다. – Akshay

0

이 질문의 목적 상, 둘 다 똑같습니다. 그들 사이에는 아무런 차이가 없습니다.

autorelease을 호출하는 것은 메모리 관리 규칙에 따라 release을 호출하는 것과 같은 일을하는 것으로 간주 할 수 있습니다. 실제로는 지연 릴리스 호출입니다. 당신은 근본적으로 말하고 있습니다, "미래에 어떤 시점에서이 물체를 풀어주세요". 물론, [switchView release]을 호출하면 보유 수를 감소시키고 객체를 완전히 해제하지는 않습니다. 셀의 부속보기로 설정하여 보유했기 때문에 객체를 완전히 해제하지는 않습니다.

여기 (또는 부족) 프로/단점을 다루는 유사한 예는있다 :

Autorelease vs. Release

당신은 애플의 가이드 라인과 여기에 오토 릴리즈 풀에 문서를 읽을 수 있습니다 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html%23//apple_ref/doc/uid/20000047-CJBFBEDI