2012-10-22 2 views
1

Objective C가 로컬 변수와 멤버 변수를 처리하는 방법을 새로 알지 못합니다. 이 죽거나하지 않습니다Objective C - IOS에서 local 및 member 변수가 작동하는 방법

fun() { 
    new_class *var = [new_class alloc] init] 

    // some code to push the view here... 
} 

모든 것이 여기 잘 작동 기능의 범위가 끝나면 이제 내 질문에 var에 지역 변수가된다 ...이 같은 함수 내부 뷰를 작성하고 생각해? 그것은보기 ... 나는 거기에 어떤 행동을하고있는 중이 야 때 제대로

덕분에 ...

답변

2

var에가 해제되어야한다 그것은 다른 개체가 가리가없는 경우 : 일부 지역 변수에 그 할당하면 당신이 준비가되면, 당신은 그것을 해제 할 수 있습니다.

이 "var에"예에 대한 UIView입니다
if it dies how the view is working properly when I am doing some action in it 

경우, 당신 [self.view addSubview:var]이, 이제 두 객체가 가리키는 있습니다 : 것은이 모든 것이 괜찮 왜 *var하고 self.view, 즉이다.

+0

그래서 내비게이션 컨트롤러를 통해보기를 밀면 참조 카운트가 바로 증가할까요? – Newbee

+0

예, 가능합니다. 그래서 모든게 정상적으로 작동하는 것 같습니다 ... – Peres

2

var이 범위를 벗어나 이동하고있을 것이다 포인터가 "삭제"를 작동하지만, 방법 죽으면 개체가 인 지점은 나중에 릴리스 될 때까지 (수동으로 또는 사용하도록 설정된 경우 ARC를 통해) 삭제되지 않습니다.

1

아니요. 사망하지 않습니다. 변수의 범위가 함수의 범위이므로 컴파일러는 fun() 메서드 외부에서 var에 액세스 할 수 없지만 메모리 누수가 발생합니다 (ARC가 없다고 가정).

메모리를 할당했으나 그것을 발표하지 않았다.

수동으로 풀어 주거나 ​​AutoReleasePool을 사용하여 풀이 빠지면 풀어 놓을 수 있습니다.

최신 버전의 IOS에서 Apple은 ARC (Automatic Reference Counting)에 대한 지원을 추가했으며 여기서 컴파일러는 [obj release]; 문을 자동으로 추가합니다. 코멘트에서

:

당신은 스택에 배치되는 개체를 가지고 있고, 당신이 나중에 해제합니다. UIView 팝업 때 해당보기에 대한 포인터가 반환됩니다.

UIView * myView = [someViewHandler popView]; 
[myView release]; myView = nil; 
+0

마지막 문장은 변수가 어떻게 든 함수 범위를 벗어날 수 있음을 의미합니다 (비록 내가 실수 할 수도 있지만 ...) – nneonneo

+0

ARC를 사용하고 있는데 ARC가 아닌 경우 어떻게 로컬 var를 삭제하거나 해제 할 수 있습니까? 그 기능에만 액세스 할 수 있기 때문입니다. – Newbee

+0

수동 메모리 관리를 위해서는 다음을 사용하십시오 :'[var release]; var = nil;' – Alan

관련 문제