2011-11-19 4 views
3

서브 클래스가 UIResponderUIViewController의 사용자 정의 서브 클래스 중 하나에 inputAccessoryView을 사용하고 있습니다.UIResponder inputAccessoryView가 왜 원자 단위입니까?

Apple Developer Class Reference for -[UIResponder inputAccessoryView] 상태 : 사용자 정의 컨트롤을 첨부 할

서브 클래스에 하나 당신이 inputView 속성에 제공 시스템이 제공하는 입력보기 (예 : 키보드) 또는 사용자 정의 입력 보기 (하나) [inputAccessoryView] 속성을 readwrite으로 다시 선언하고 사용자 지정 액세서리 보기를 관리하는 데 사용해야합니다. inputAccessoryView 재 선언 후

  1. ,해야한다 그때 @synthesize 그것? 그렇게하면 컴파일 할 수있는 유일한 방법 인 것처럼 보였습니다.하지만 Apple의 inputAccessoryView ivar을 사용하고 싶습니다. 내 자신을 합성하지 않습니다.
  2. inputAccessoryViewnonatomic으로 다시 선언 할 수 있습니까?
  3. 그때 난 항상 속성을 통해, 즉, self.inputAccessoryViewinputAccessoryView에 액세스 할 수 있어야 대신 직접 스레드 안전을 유지하기 위해, 바르에 액세스 nonatomicinputAccessoryView을 재 선언 할 수없는 경우? UIResponder가 setInputAccessoryView: 방법을 노출하지 않는

답변

2
  1. 예, 당신은 재산 자신을위한 세터를 제공해야합니다. 기본 ivar에 액세스 할 수 있다면 setInputAccessoryView : 메서드를 직접 작성하여 설정할 수 있습니다. 하지만이 경우에는 액세스 권한이 없으므로 직접 만들면됩니다.

  2. 나는 그렇게 생각하지 않는다. 이것은 슈퍼 클래스 선언과 호환되지 않습니다.

  3. 메인이 아닌 스레드에서 UIKit을 호출하는 (거의) 호출이 유효하지 않기 때문에이 속성이 nonatomic이 아닌 이유를 알 수 없습니다. 특히,이 속성은 UIView이며 setter가 비 기본 스레드에 안전하게 유지하고 해제하는 방법은 없습니다 (UIView).

    즉, 배경 스레드에서 setter를 호출하는 경우 코드가 손상됩니다. 메인 스레드에서만 호출 된 경우 직접 ivar에 액세스 할 수 있습니다. 따라서 직접 ivar에 액세스 할 수있는 이유는 없습니다.

+0

특히 3 점이 나 자신을 궁금하게 만들었습니다. 전혀 이해가되지 않습니다. – Till

+0

"비 원자 적"키워드가 없으면 구현이 스레드 안전 (threadsafe)을 의미하지 않습니다. –

+0

사실, 여러 스레드에서 사용되지 않을 것으로 예상되는 사항에 대해서는 '비 원자력'을 볼 것으로 기대합니다. –