2014-12-08 2 views
0

클래스 A에 "myDictionary"라는 멤버 변수가 있다고 가정 해 보겠습니다.강력한 객체에 자동 레이아웃 된 객체 할당

내가 이렇게 지금 경우 :

myDictionary = [NSDictionary dictionary]; 

내가 클래스의 기본 구성원으로 강한 타입 인 것을 알고있다. 따라서 myDictionary는 클래스 A 객체의 수명 동안 사용할 수 있습니다. 내 이해가 ARC에 관한 것입니다.

그러나 나는 정말로 나를 혼란스럽게하는 myDictionary에 EXE_BAC_ACCESS을 얻고 있습니다. myDictionary에서 EXE_BAD_EXCESS을 피하기 위해 추가 작업이 필요합니까? 위의 메서드는 자동 렌더링 된 객체를 반환하기 때문입니다.

미리 감사드립니다. 당신은 ARC를 사용하지 않는 경우

+5

관련 코드의 스택 트레이스 및 그 이상을 표시하십시오. – Droppy

+0

myDictionary는 ivar입니까? –

답변

0

, 당신은 당신이 오토 릴리즈 사전을해야하고, 언제든지 사전을 + 사용해야 + ALLOC/당신은 당신이에 개최 예정하고 사전을 필요로하는 어떤 시간을 초기화하기 (예 : ivar에 넣음으로써), 또는 단순히 autorelease 및 - 수동으로 해제하지 않으려는 경우.

그래서 이런 식으로 구현하려고 : 여기서 가장 가능성이 오류가 여러 스레드에서 myDictionary에 액세스하는

myDictionary = [[NSDictionary alloc] init]; 
+1

OP는 "클래스의 기본 멤버가 강력한 유형이라는 것을 알고 있습니다."라는 문구와 함께 ARC를 사용하고 있음을 의미하므로 답변이 어떻게 해결되는지는 알 수 없습니다. 문제는 오해의 소지가 있으며 적절하게 답변되기 전에 설명이 필요합니다. – Droppy

0

. 항상 ivar에 액세스하는지 확인하는 것은 _myDictionary ivar를 직접 참조하기보다는 항상 속성을 self.myDictionary으로 참조해야하는 몇 가지 이유 중 하나입니다. 이 thread-safe를 만들 필요가있을 때, 코드를 수정해야하는 곳이 한 군데 만있을 것입니다.

CFBridging... 함수의 잘못된 처리와 같은 다른 오류가 발생할 수있는 방법이 있지만 가장 일반적인 방법은 멀티 스레드 액세스입니다.

관련 문제