2012-02-03 3 views
0

5 개의 객체 배열을 가진 응용 프로그램이 있습니다. 이러한 개체는 모두 사용자 지정 클래스입니다. 루프의 다음 반복과 임시 배열을 수정 한 후 isEqualToArray을 사용하여 값이 같거나 다른지 확인합니다. 그러나, 분은 내가 EXC_BAD_ACCESS를 얻는 것을한다. 이러한 일이 발생하지 않도록 수업에서 구현해야 할 것이 있습니까?isEqualToArray가 사용자 정의 클래스와 충돌 함

너무 많은 정보를 제공하지 않으면 맞춤 클래스는 5 NSString* 변수 만 저장합니다.

+0

샘플 코드를 제공해 주시겠습니까? 추신 배열에 대한 루프를 시작하고 해당 배열을 수정하면 충돌이 발생할 수 있습니다. 즉, 루프를 수행하는 동안 배열을 수정할 수 없습니다. –

답변

0

NSString 변수와 같은 소리가 나왔고 잘못된 메모리에 액세스했습니다.

배열에서 제거합니까? 또는 autorelease 의미론을 사용하여 배열을 만들고 배열에 넣은 다음이를 놓아도됩니까?

좀 더 많은 코드를 게시 할 수 있으며 정확한 내용을 알려 드릴 수 있지만 출시되었을 가능성은 더 높습니다.

NSZombieEnabled를 켜면 '잘못 액세스 된 것'을 정확히 볼 수 있습니다.

+0

네 말이 맞아. 나는 그것을 배열에 추가 한 후에 객체를 해제했다. 하위보기에보기를 추가하는 것과 동일한 레이아웃을 따른 것으로 생각했습니다. 일단 추가하면 즉시 풀어 놓을 것입니다. NSMutableArrays 동일하지 않습니다 같아요 – Seb

+1

그것의 UIView 또는 NSMutableArray 여부 컨테이너의 형식과 아무 상관이. 그것은 객체가 생성 된 방법과 소유권과 관련이 있습니다. 자신이 소유 한 객체에 대해서만 릴리스를 호출합니다. alloc, copy, new, retain을 사용하여 객체를 얻은 경우에만 객체를 소유합니다. 따라서 UIView를 만들었을 때 alloc : initWithFrame :을 사용했을 가능성이 높습니다. 따라서 release를 호출해야합니다. NSString을 만들 때 stringWithFormat과 같은 편리한 autorelease 메서드를 사용했을 가능성이 높습니다. 소유하고 있지 않으므로 릴리스를 호출하지 마십시오. 기억 규칙을 다시 한번 보거나 (또는 ​​ARC를 사용하십시오). – bandejapaisa