2011-02-26 2 views
0

내 코드에서 이벤트라고하는 .h 파일에 대응하는 전역 변수를 만듭니다. 이것은 NSMutableArray입니다.글로벌 var에 대한 신비한 기억 상실?

"viewDidLoad"가 호출되면 코드에서 여러 가지 작업을 수행합니다. 먼저 이벤트를 초기화합니다. 그런 다음 7 개의 NSMutableArrays를 만들고이를 이벤트 객체에 추가합니다.

viewDIdLoad는 할당 된 버튼을 만들고 추적을 위해 다른 NSMutable 배열에 삽입하여 UI 설정을 계속합니다.

viewDidLoad가 끝날 때까지 이벤트 객체는 훌륭하게 멋지게 작동합니다. 생성 된 버튼 중 하나를 누르고 해당 버튼이 이벤트에 액세스하려고하면 시스템이 충돌합니다.

나는 무엇이 잘못되었는지 알아 내려고 노력하고 디버깅의 톤을했고, 나는이 그것을 좁혀 : 내 코드가 완료

얼마 후, 이벤트가 완전히 떨어졌다됩니다. 내 함수가 끝날 때까지 추적했고, 결국에는 여전히 7 개의 NSMutableArrays를 모두 가지고있었습니다. 내 함수의 끝에 도달하면

, 나는 버튼을 계속 누르, 단지 생성 버튼 이벤트 VAR를 다시 액세스 장소 전에 중단 점을 배치. 그 위치에서 이벤트는 완전히 비어 있습니다.

지금 당장은 간단히하기 위해 자동 반복 또는 명령을 수행하지 않습니다. viewDidLoad 호출의 여러 메소드 중 하나에서 정의 된 변수에 대해 ONE 릴리스 명령이 있습니다.

아무에게도 이벤트가 언로드되지 않도록하는 방법을 알려주십시오. 고마워요.

답변

3

Events = [NSMutableArray array];과 같은 것처럼 들립니다. 그러면 NSMutableArray의 자동 렌더링 된 인스턴스가 만들어지며,이 인스턴스는 함수가 반환 된 후 자동으로 처리됩니다.

대신 autoreleased가 아닌 인스턴스를 만들려면 Events = [[NSMutableArray alloc] init];을 지정하고, autoreleased 인스턴스를 유지하려면 Events = [[NSMutableArray array] retain];을 사용하는 것이 좋습니다. 어느 쪽이든 시스템은 여전히 ​​객체를 사용하고 있는지 알 수 있으므로 폐기하지 않습니다.

+0

답변 해 주셔서 감사합니다. :) 나는'이벤트 = 시도 갈 것입니다 [[NSMutableArray를 arrayWithCapacity : 7] 유지]'(나는'이벤트 = 사용하던 [NSMutableArray를 arrayWithCapacity : 7;') 너무 많이, 그것은 마법처럼 작동 –

+0

감사를 초기화하기 위해서! –

1

당신은 당신의 코드를 게시하지 못했지만, 내 생각 엔 당신이 단순히 [NSMutableArray array]를 통해 배열을 할당, 당신은하지 않았다이다? 자, 배열은 흐름이 배열을 만든 메서드를 떠난 후 언젠가 자동으로 렌더링됩니다. 이를 막으려면 어레이를 retain으로 간단하게 설정해야합니다.