2012-01-12 2 views
1

먼저 ARC를 사용한다고 말하면서 retain은 옵션이 아닙니다. 객체의 클래스는 NSViewController 유형이며 여러 개의 텍스트 필드와 버튼뿐만 아니라 두 개의 NSTimer가 있습니다. 이상한 점은 두 타이머가 무효화되면 객체가 출시되는 것처럼 보입니다. 때로는 일시 중지하거나 다시 시작하기 때문에 문제가 발생합니다. 즉, 해당 항목을 무효화해야한다는 의미이므로 참조가 손실되고 개체에 대한 모든 메시지가 EXC BAD ACCESS를 throw합니다.코코아 : 객체가 자동으로 리사이징되지 않아야 할 때

메모리 관리 나 ARC에 익숙하지 않지만 타이머에만 의존하여 참조가 손실되는 이유는 무엇입니까? 내 말은, 그들이 무효화되었다고해서 더 이상 물건이 필요 없다는 의미는 아닙니다.

타이머를 인스턴스 변수 및 속성으로 선언했지만 아무것도 변경하지 않았습니다.

두 개의 타이머가 무효화 되더라도 참조가 유지되지 않도록해야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

NSTimer은 목표를 유지하므로 타이머가 무효화 될 때 객체에 대한 유일한 참조 일 때 할당이 해제됩니다. 당신은 당신의 물건에 대한 소유권을 가져야 만합니다.

편집 : "위임 대상"을 "대상"으로 변경했습니다.

예, 속성 및 인스턴스 변수를 선언해야합니다. release notes 좋은 예를 들면, 다른 좋은 소개가 몇 개 있습니다. 소유자 클래스의 할당이 해제 된 경우 타이머를 무효화하십시오. 그렇지 않으면보기 컨트롤러가 중단됩니다.

+0

"위임"이 아니라 "대상"을 의미합니다. –

+0

유망한 소리. 그래서 내 다른 클래스 (이 개체를 만드는 하나의) 헤더 파일에이 개체에 대한 선언이 있어야합니까? 그리고 내가 그것을 강한 재산으로 만들기 위해 어떤 임무를 사용해야합니까? – Elbimio

+0

@ Francis McGrew 아직 문제가 있습니다. 나는 클래스를 (비 원자력, 강한) 속성으로 선언했다. 문제는 클래스의 여러 인스턴스가 필요하며 두 번째 인스턴스를 만들 때 이전에 만든 NSTimer를 다시 시작하면 잘못된 액세스가 throw됩니다. 나는 두 번째 것이 첫 번째 것 또는 어떤 것을 덮어 씌우고 있다고 생각하지만 그들은 독립적이라고 생각합니다. – Elbimio