2012-10-10 2 views
1

나는 아이폰을 프로그래밍하는 것을 배우고 있으며, 나는 그림을 그리기를 원했다. 몇 가지 예제 코드를 따라 viewcontroller 하위 클래스로 잘 작동했습니다. 이제 프로그램을 확장하고자 할 때 약간의 도움을 사용할 수있는 디자인 문제가 발생했습니다.xcode 하위 클래스의 뷰를 사용

myviewcontroller를 mynewview로 하위 클래스 화합니다. myviewcontroller에 코드가 있다면 mynewview에서 어떻게 호출하거나 참조해야합니까? 이 권리를 묻는 지 확실하지 않지만 클래스와 하위 클래스 간의 관계를 이해하려고합니다.

답변

0

Objective-C 객체는 상속의 이점을 얻습니다. 모든 클래스는 NSObject의 서브 클래스이므로 모든 객체에서 init을 호출 할 수 있습니다. 사용자 정의 클래스를 작성하여 doSomethingAwesome 메소드를 제공 한 경우 사용자 정의 클래스의 서브 클래스에서 doSomethingAwesome을 자유롭게 구현할 수 있습니다. 그러나 서브 클래스에서 메소드를 선언한다고해서 해당 메소드가 수퍼 클래스에 추가되는 것은 아닙니다. 제쳐두고, 나는 나 자신이 자신의 클래스를 하위 클래스로 부르는 것을 거의 발견하지 못한다. 저는 얕은 객체 계층 구조를 유지하는 것이 바람직하다고 믿습니다. 일반적으로 주식 코코아 클래스를 서브 클래스 화하고 내 필요에 맞게 사용자 정의하고 하나 이상의 서브 클래스에서 사용자 정의 메소드가 필요한 경우 내 사용자 정의 동작을 제공하기 위해 상속에 의존하지 않고 수퍼 클래스에서 카테고리를 선언합니다.

+0

덕분에 도움이되었습니다. 올바른 방향으로 조금 움직여야했습니다. –

0

메시징 시스템 -C는 동적입니다. 모든 객체에는 런타임에서 내성을 위해 사용하는 정보가 포함 된 struct이 포함됩니다. 여기서 런타임은 객체가 응답 할 수있는 메소드 목록을 찾습니다. 자, 인스턴스 이런 식으로 메시지를 가정 해 봅시다 :

[mynewview someMethod]; 

런타임 먼저 메시지를 응답 할 수 있습니다 몇 가지 방법을 찾기 위해 노력에 오브젝트 정보를 확인합니다. 아무것도 찾지 못하면 수퍼 클래스를 쿼리합니다. 실제로 런타임은 훨씬 복잡하며 모든 객체에 응답 할 수있는 기회가 더 많습니다 (동적 인 부분입니다). 예를 들어 mynewview에는 someMethod이라는 메서드가 없을 수도 있지만 호출을 만족시킬 수는 있지만 그게 뭔가입니다. 당신은 지금 걱정하고 싶지 않을지도 모릅니다).

[super someMethod]; 

경우 someMethod입니다 : 당신이 키보드 super에 주어진 방법의 슈퍼 클래스 구현을 호출 할 수 있습니다 myviewcontroller의 서브 클래스는 mynewview 그래서 만약 당신이 mynewview에서 myviewcontroller 구현을 호출 할 수있는 자식 클래스에서

모두 myviewcontrollermynewview에있는 경우 런타임은 자동으로 하위 구현 만 호출하므로 하위 구현에서 상위 구현 (필요한 경우)을 호출해야합니다.

+0

빠르고 유용한 답변을 제공해 주셔서 감사합니다. 나는 그것이 많은 도움이되었다고 생각한다. –

관련 문제