2012-02-17 3 views
0

저는 obj-c를 처음 접했고 누군가가 이것을 설명 할 수 있는지 궁금합니다. UIGestureRecognizer를 현재 뷰에 추가 한 다음 바로 릴리스합니다. 왜 그런가? 우리가 배포한다면 프로그램에서 쓸모 없게 만들지 않을 것인가?목표 C, UIGestureRecognizer 할당 및 해제

recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 

((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3; 

[self.view addGestureRecognizer:recognizer]; 

[recognizer release]; 
+5

"유방 관리"? 모든 것이 가슴이 아플 때가 아닐까요? – Widor

+3

유감이지만 Objective-C는 유방을 최소한으로 관리 할 수는 없습니다. 직접 해봐야 할 것입니다. ;) (기록을 위해이 질문은 원래 '목표 -C의 유방 관리'로 제목 지어졌다.) –

+1

감사합니다. –

답변

2

당신은 실행하면 :

[self.view addGestureRecognizer:recognizer]; 

제스처 인식기 카운트가 증가 유지한다. 그래서,이 release을 다음 단지 반대의 균형을 이러한 관점에서 생각할 수있는, 즉 1

의 수를 유지 가진 개체를 반환 ALLOC/초기화 조치 :

  1. ALLOC을 ->은 유지 그 물체;
  2. addGestureRecognizer -> 개체를 유지합니다. 당신이 self.view 제스처 인식기의 유일한 소유자가 될 것을 원하기 때문에

, 당신은 순서대로 다시 물건을 얻기 위해 한 번 release를 호출합니다. self.view이 할당 해제되면 제스처 인식기에서 release가 호출되고 할당 취소됩니다.

이렇게하지 않으면 self.view가 할당 해제되었을 때 release이 제스처 인식기에서 호출되지만 보유 수를 0으로 낮추기에 충분하지 않으므로 메모리 누수가 발생합니다 retain이 암시 된 alloc으로 인해).

희망 사항은 조금 더 명확하게 설명합니다.

+0

답변 해 주셔서 감사합니다. –

0

iOS에서 뭔가가 있습니다 (보유 개수) 이것은 개체 또는 개체가 사용하는 모든 참조를 추적하는 데 사용되는 내부 카운터입니다. 그래서 (alloc, copy, retain) 할 때마다 물체가 보유 카운터를 1 씩 증가시킵니다.이 3 가지 경우에 카운터를 1 씩 줄이는 물체를 (릴리스) 할 책임이 있습니다 .. 물체를 놓을 옳은 것을 만들었지 만, 할당 취소 된 이유는보기에 추가 할 때 보유 카운터가 1 씩 증가하므로 여전히 메모리에 있지만 여전히 삭제할 책임이 없습니다. iOS가 자동 수락 할 것입니다. 이것이 도움이되기를 바랍니다. 행운을 빕니다.