핵심 데이터가있는 카테고리를 사용하고 있습니다. 제가 읽은 튜토리얼과 강의 중 일부는 종종 범주가 "나쁜"습관으로 간주됩니다. 그러나 Objective-C는 매우 역동적이기 때문에 클래스의 공용 속성 만 사용할 수 있기 때문에 다른 곳에서 메서드를 정의해도 괜찮습니다. 카테고리를 사용할 때주의해야 할 함정은 무엇입니까? 아니면 카테고리가 실제로 나쁜 습관 인 이유가 있습니까? 핵심 데이터와 함께 사용하는 이유는 내가 서브 클래스를 재생성 할 때마다 추가 기능 메소드를 다시 작성하지 않기 때문입니다.카테고리가 언제/위험합니까?
답변
내가 생각할 수있는 유일한 위험은 서브 클래 싱하지 않고 원래 클래스의 메서드를 대체 할 때 사용하는 것입니다.
이렇게하면 원래 구현에 액세스 할 수 없게됩니다.이 구현은 일반적으로 재정의하는 개인 메서드이기 때문에 예상치 못한 결과가 발생할 수 있습니다.
특정 클래스의 모든 객체에 엑스트라 메쏘드를 추가하는 카테고리를 사용하는 것은 훌륭하고 정확하게 수행 할 수 있습니다. 코어 데이터를 핵심 데이터로 사용하면 코드를 변경하지 않고도 모델을 변경하고 "바닐라"객체를 다시 생성 할 수 있기 때문에 잘 수행됩니다. 모자의
팁 사과에서 문서의이 비트에 대한 @CodaFi합니다 : Objective-C 언어는 현재 당신이 선언 된 클래스는 상속 방법, 또는 메소드를 오버라이드 (override) 카테고리를 사용할 수 있습니다
있지만 클래스 인터페이스에서는 그렇게하지 않는 것이 좋습니다. 카테고리는 서브 클래스를 대신 할 수 없습니다. 범주를 사용하여 메서드를 재정의하는 데는 몇 가지 중요한 단점이 있습니다.
범주가 상속 된 메서드를 재정의하는 경우 범주의 메서드는 평상시처럼 상속 된 구현을 super로 메시지를 통해 호출 할 수 있습니다. 그러나 카테고리가 클래스의 클래스에있는 메소드를 대체하는 경우 원래 구현을 호출 할 방법이 없습니다.
범주는 동일한 클래스의 다른 범주에서 선언 된 메서드를 안정적으로 재정의 할 수 없습니다.
이 문제는 많은 코코아 클래스가 범주를 사용하여 구현되기 때문에 특히 중요합니다. 재정의하려고하는 프레임 워크 정의 메소드 자체가 카테고리에 구현되었을 수 있으므로 어떤 구현이 우선 적용되는지는 정의되지 않습니다.
일부 범주 메서드가있는 경우 모든 프레임 워크에서 동작이 변경 될 수 있습니다. 예를 들어, NSObject의 카테고리에서 windowWillClose : delegate 메소드를 오버라이드하면 프로그램의 모든 윈도우 델리게이트가 category 메소드를 사용하여 응답합니다. NSWindow의 모든 인스턴스의 동작이 변경 될 수 있습니다. 프레임 워크 클래스에 추가하는 카테고리로 인해 동작이 신비하게 변경되어 충돌이 발생할 수 있습니다.
답변을 주셔서 감사합니다. 구현이 우선시되는 부분은 특히 흥미 롭습니다. – Dustin
- 1. 내가 모델 카테고리가
- 2. 오픈카 카테고리가 너무 느림
- 3. Magento 카테고리가 표시되지 않습니다.
- 4. Maven 카테고리가 Netbeans에 표시되지 않습니다.
- 5. 카테고리가 새 페이지에서 카테고리로 표시됩니다.
- 6. 섹션의 카테고리가 같은 순서로 표시됩니다.
- 7. AVAudioSession 카테고리가 설명서대로 작동하지 않습니다.
- 8. 테스트 카테고리가 더 이상 태그
- 9. 카테고리가 bm_categories.php에서 빌드되는 방식 수정하기
- 10. 404 카테고리가 Joomla 1.7에 없습니다.
- 11. 레일 카테고리에 많은 카테고리가 있습니까?
- 12. Magento : 카테고리가 잘못된 순서로 표시됩니다.
- 13. 카테고리가 정의되어 있지 않습니다 - 레일
- 14. wp_list_categories에 현재 카테고리가 표시되지 않습니다.
- 15. 신제품을 추가하려고하면 Magento 제품 카테고리가 사라집니다.
- 16. * * * WordPress 카테고리가 상위 카테고리 템플릿을 사용합니다.
- 17. 범주 이름 만 사용하여 카테고리가 존재하는지 확인하십시오.
- 18. jQuery UI 자동 완성 카테고리가 표시되지 않음
- 19. 디버그 카테고리가 로깅되지 않는 이유는 무엇입니까?
- 20. PHP 카테고리가 Wordpress에 있는지 알고 싶습니다.
- 21. AVAudioPlayer는 카테고리가 AVAudioSessionCategoryPlayback인데도 화면 잠금에서 재생을 중지합니다.
- 22. 사이드 바에 magento 하위 카테고리가 있습니다.
- 23. Magento 카테고리가 홈 페이지에 표시되지 않음
- 24. wordpress - 카테고리가 다른 카테고리의 하위인지 확인하는 방법?
- 25. PerformanceCounterCategory. 카테고리가 존재하지 않는 경우 매우 느립니다.
- 26. 내가 아주 간단한 UIFont 카테고리가 UIFont 카테고리
- 27. 제품 카테고리가 일치하는 동적 카테고리 기준 3
- 28. PHP + MySQL 카테고리가 표시되지 않아야 함
- 29. 이 카테고리가 작동하는 이유는 무엇입니까? 클래스 확장
- 30. "게임"은 유효한 YouTube 카테고리가 아닙니다.
반 - 카테고리 의견을 본 적이있는 유일한 시간은 기존 방법을 재정의하려는 시도입니다. 일반적인 경우 나쁘다면 SDK 및 샘플 코드에서 얼마나 자주 사용되는지 고려하여 많은 수의 Apple 소프트웨어 엔지니어를 놀라게 할 것입니다. –