2014-01-29 1 views
1

방금 ​​프로젝트의 새 클래스 인 UITableViewController의 하위 클래스를 만들고 tableView : cellForRowAtIndexPath : template 메서드에서 셀 식별자로 사용할 정적 로컬 NSString을 제공한다는 것을 알았습니다.ARC를 사용하여 정적 로컬 및 글로벌 변수를 어디에서 릴리스해야합니까?

정적 전역/로컬 변수에 대해서는 nil을 지정해야하므로 강하다고 간주됩니다.

그래서 나는 스스로에게 정적 전역 변수에 nil을 할당해야하는 질문을 물었습니다. 정적 전역 변수? 이 글로벌이기 때문에 답변들

답변

1

"정적 전역 변수를 공개해야하는 곳"에 대한 간단한 대답은 "아무 곳에도 없음"입니다.

길게 대답하면 다음과 같이 변합니다. 변수 static 또는 global을 만들 때 클래스가 존재하거나 출시 될 때마다 관계가 존재해야합니다. 간단히 말하자면, 귀하는 static이 항상 당신을 위해 존재하기를 바랍니다. 따라서 프로그램을 종료하려고하는 경우에만이를 해제해야합니다. 그러나 프로그램이 끝나면 운영 체제에서 정리 작업을 처리하고 전역 변수와 정적 변수를 해제하는 것을 잊어 버릴 수도 있습니다.

그러나 static 및 전역 변수의 사용은 표준이 아닌 예외이어야합니다. 당신은 좋은 이유를 위해 그것들을 사용하고, 무엇이 static이어야하는지에 대한 최선의 판단을 행사하십시오. 게다가, 정적 참조에서 정적 변수의 컬렉션을 강력한 참조를 통해 참조하는 것을 피해야합니다. 그렇지 않으면 찾기 힘든 메모리 누수가 발생할 수 있기 때문입니다.

셀 식별자로 사용되는 NSString의 정적 로컬에는 아무런 문제가 없습니다. 메모리가 거의 필요하지 않으며 확장되지 않으므로 프로그램 끝 부분에 출시되지 않습니다. 운영.

+0

전역 및 로컬 정적 인 경우 내 tableView 할당이 해제되는 것을 방지하지 못합니까? – Dabrut

+0

@Dabrut 그렇지 않다면 그 전역 또는 정적 참조를 직접 또는 간접적으로'tableView'. 반면에 'tableView'는 그 구현에 많은 통계 또는 전역 변수를 가질 수 있습니다. 뷰에 대한 참조가 그 중 하나에 저장되어 있지 않으면 테이블 뷰의 인스턴스가오고 갈 수 있습니다 부디. – dasblinkenlight

+0

혼란에 대한 미안 해요 내 UITableViewController 대신 내 uitableview – Dabrut

0

당신은 그것을 할 필요가 없습니다에 대한

덕분에, 방출하지하고 확인 않을 것입니다.

에서 ARC는 기본값으로 강하게 취급되며 수명은 응용 프로그램 수명과 같습니다.

0

정적 문자열은 특별한 경우이므로 해제 할 필요가 없습니다.

0

정적 변수는 포인터가 가리키는 대상에 대한 강력한 참조를 보유한다는 것을 의미합니다.

static MyClass *var; 
var = [MyClass instance]; 

지금 var는 항상 메모리에서 제거되지 않습니다 object.so 할당 위의 강한 참조를 보유하고 있습니다.

그러나 어떤 조건 후에는 더 이상 해당 개체가 필요하지 않습니다. 그러면 var =nil이 간단하게 작동합니다.
이제 var이 nil을 가리키고 더 이상 생성 된 object.so를 가리 키지 않기 때문에 해당 객체는 메모리에서 삭제됩니다.