문제

나는 KVC/KVO에 매료되었습니다.매우 강력합니다.그런데 한 가지 문제가 있습니다.저는 MVC 정신을 따르려고 노력하고 있지만 관찰 패턴을 사용하여 Objective-C 클래스 인스턴스의 할당 또는 할당 해제를 모니터링할 방법이 없습니다.

컨트롤러(또는 대리인)에서 관찰하려는 세분화된 내부 메시징이 포함된 모델이 있으므로 이는 실제로 중요합니다.저에게 걸림돌은 캡슐화를 손상시킬 수 있는 모델의 내부 논리를 컨트롤러가 알지 못한 채 모델 외부에서 할당이 취소될 하위 구성 요소에 대한 관찰자를 어떻게 제거할 수 있는지 알 수 없다는 것입니다.

누군가 이 시나리오에 대한 접근 방식을 제안할 수 있습니까?

감사합니다, 더그

도움이 되었습니까?

해결책

Doug- 설명에는 그것이 무엇을하고 있는지, 그리고 최선을 다하는 방법 (또는 전혀 적절한 경우)을 문제에 적용하는 방법을 알기에 충분한 정보가 없습니다.

KVO는 객체의 속성을 관찰하는 것입니다. 당신은 일반적으로 그들이 파괴되기 전에 관찰을 중단 해야하는 한, 그들이 만들거나 파괴 될 때 신경 쓰지 않아야합니다.

대신 해당 객체가 흥미로워지면 개체 관찰을 중단해야합니다. 문서에 순서 대형 모양이있는 그래픽 그리기 패키지를 고려하고 각 모양의 배경 검색 속성을 관찰하는 데 관심이 있습니다.

우리는 모양 인스턴스의 인스턴스화와 거래를 관찰하려고 시도하지 않고 대신 문서의 "모양"속성을 관찰합니다. 그 관찰자를 통해, 우리는 문서가 언제 추가되거나 제거되었는지 확인할 수 있습니다. 모양이 문서에 추가되면 문서를 관찰하기 시작합니다. 문서에서 제거되면 관찰을 중단합니다. (문서에서 제거 될 수 있지만 거래되지 않은 스택 등에있는 경우 문서에서 제거 할 수 있습니다.)

모델의 객체 그래프에서 KVO를 사용하려면 KVO 준수 방식으로 객체 그래프에서 객체를 추가하고 제거하여 관계 돌연변이를 관찰 할 수 있고 해당 관찰자에서 속성 관찰자를 시작하고 중지하려고합니다. 관련 객체.

다른 팁

Coredata와 같은 것을 사용하지 않는 한 알림을 직접 게시해야한다고 생각합니다. Coredata를 사용하는 경우 NsmanagedObject (모든 저장된 Coredata 객체의 루트 클래스)에는 객체가 생성되어 ManagedObjectContext에 삽입 된 후 호출되는 -AWAKEFROMINSERT 메소드가 있습니다.

파괴에 관해서는 -dealloc 메소드를 입력 할 때 알림을 올릴 수 있습니다.

나는 당신이 달성하려는 것이 무엇인지 정확히 확신하지 못하므로 조금 더 설명하는 것이 좋습니다.

관찰된 객체의 할당이 취소되기 전에 관찰자를 제거하려는 경우 KVO가 이를 처리하므로 걱정하지 마십시오.알림을 사용하더라도 문제가 발생하지 않으며 개체로부터 알림을 받지 못할 뿐입니다.

여러 물체를 관찰하려는 경우(예:위젯 배열), 객체가 추가되거나 삭제되는 시기를 알고 싶어하는 경우 KVO도 이를 처리할 수 있습니다.배열을 모델 객체의 키로 만들고 KVO로 관찰하면 됩니다.또한 KVO 호환 방식으로 어레이를 수정해야 합니다(예:mutableArrayForKey: 또는 자체 willChangeValueForKey 및 didChangeValueForKey를 사용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top