2013-06-08 5 views
3

이것은 실제 질문 대신 일반적인 토론 일 수 있습니다. NSTableView와 NSOutlineView를 사용하기 시작했을 때, NSView의 인스턴스가 거의 모든 것을 할 수 있다고 생각했습니다. 그래서 NSView 인스턴스를 델리게이트와 데이터 소스로 리턴한다.NSTableView가 NSView 대신 NSCell을 사용하는 이유는 무엇입니까?

Citect는 작동하지 않았고 NSObject에서 직접 상속 한 NSCell 인스턴스를 NSTableView가 사용한다는 사실을 깨달았습니다.

코코아가 NSCell을 기반으로 NSTableView를 만든 이유를 이해하는 것이 중요 할 수 있다는 것을 느꼈습니다. 그러나 그것을 분명히 설명하는 문서는 거의 없습니다. 따라서 나는 Stackoverflow 차례. 누구는 그것을 압니까? 미리 감사드립니다! 당신은 문자열을 표시하려면

+4

Lion 이후 NSCell 셀 대신 NSView 셀을 사용할 수 있습니다. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/ViewBasedTables/ViewBasedTables.html을 참조하십시오. 나는'NSTableView'가 성능 때문에 NSView 셀을 사용하지 않았다고 믿지만 실제로 그것에 대해서는 확실하지 않습니다. –

+2

@Bavarious 여러면에서 정확합니다. 원래 NSTableView는 뷰가 비교적 * 매우 * 비싸기 때문에 뷰를 셀로 사용하지 않았습니다. 셀은 거의 아무것도 아니지만 "이봐, 여기 임의의 직사각형을 그려라."자신의 드로잉 컨텍스트가 없습니다. – bbum

+0

@Bavarious 안녕, 다시! 성능 문제 ... 나는 그것에 대해 생각하지 않았다. 당신이 링크 한 문서는 좋을 것입니다. 이전에 [TableViewPlayground] (http://developer.apple.com/library/mac/#samplecode/TableViewPlayground/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010727)를 보았습니다. 하지만 너무 복잡해서 공부하지 않았습니다. 내가 다시 읽어야하는 것 같아. –

답변

6

당신은 될 것이라고 관리자

Change from Cell to View Based

셀 기반의 셀에 대한 이유에 NSTableView는 또는 NSOutlineView 기준으로보기로 전환 할 수 있습니다. 문자열 만 표시하려는 경우 각 셀의 전체보기를 초기화하는 데 리소스가 낭비됩니다. 기본적으로 메모리 컨트롤 대 표시해야하는 것입니다.

4

@ d00dle의 대답은 NSView 뒷받침 테이블보기를 사용하는 방법을 보여 주지만 NSTableViews가 역사적으로 처음 NSCell을 사용한 이유에 대한 대답은 아닙니다.

대답은 NSViews가 무거운 물체이며 관리 비용이 비싸다는 것입니다. NSTableViews는 일반적으로 "보기와 같은"많은 행과 열을 필요로합니다. 모든 NSView를 순진하게 추가하면 반응 형 UI를 유지할 수 없습니다.

이것은 애플사가 NSView에서 지원하는 테이블과 아웃 라인 뷰를 지원하기 위해 추가 한 트릭이다. 그것은 제한된 수의 NSView를 생성하고 주어진 순간에 사용중인 NSView의 총 수를 줄이기위한 영리한 방법으로 재활용합니다.