2009-07-27 3 views
1

우리는 다음과 같은 코드를 작성하는 경우 : 이것은 원래 위임 포인터에 대한 참조를 만드는목표 - C 대표 포인터

ExplorerAppDelegate * appDelegate = (ExplorerAppDelegate *)[[UIApplication sharedApplication] delegate]; 

:하지만,

  • 그것을 참조 카운트 증가 하는가를?
  • 바로 뒤에 [ExplorerAppDelegate retain]으로 명시 적으로 호출해야합니까, 아니면 전혀 호출하지 않아야합니까?
  • 정확히 어떻게됩니까?

우리가 이것을 사용한 후에는 dealloc 메소드에서 [ExplorerAppDelegate release]을 수행해야합니다. 맞습니까?

답변

0
  1. 참조 카운트는 당신이 당신이
  2. 당신은 단지 그것을 당신이 유지하는 경우를 해제해야합니다에 대한 포인터를하는 동안 할당이 해제되지 않았는지 확인하려는 경우 당신은 그것을 유지해야
  3. 증가되지 않습니다 그것

기본적으로, 당신은 단 하나의 기능에서 개체를 사용하는 경우, 당신은 아마 그것을 유지하거나 해제하지 않아도됩니다. 당신이 그것을 얻을 때 존재한다면, 아마 함수의 끝까지 할당 해제되지 않을 것이다. 예를 들어, ivar (멤버 변수)에서 주위를 지키고 있다면, 그것을 유지하고 나중에 놓아야합니다.

+0

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

+0

이것은 모두 유효하고 완벽합니다. 하지만 ... 응용 프로그램 시작시 응용 프로그램 대리인이 만들어지기 때문에 릴리스되지 않습니다. (적어도 종료 할 때까지) 참조를 유지하고 유지하지 않으며 완전히 무시해야합니다. 이 경우 응용 프로그램의 유효 기간 동안 참조가 유효 함을 알 수 있습니다. –

2

아니요, 보유 수를 늘리지는 않습니다.

Objective-C의 규칙은 주어진 객체가 자신이 관리하는 메모리 여야한다는 것입니다. 그러나 앱 대리인과 같은 공유 공통 리소스를 얻는 경우 메모리는 다른 곳에서 물론 유지됩니다 앱 위임자) 클래스가있는 한 항상 "살아있을 것"이라는 것을 알기 때문에 참조를 유지할 필요가 없습니다.

대리인의 대부분을 사용하는 경우 대리인을 가져 오는 대신 주어진 하나의 대리인이 사용되며 해당 참조도 유지되지 않습니다. 이 경우 대리인을 준 사람은 대리인이 공개되기 전에 대리인 링크를 지우는 데 반응합니다.

일반적으로 대리인 참조를 보유하지 않으려는 이유는 한 클래스가 다른 클래스를 대리인으로 사용하는 클래스의 대리인 인 경우와 같이 일부 개체의 할당이 취소되는 것을 방지 할 수 있기 때문입니다.

+0

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