2012-04-04 2 views
6

Ich bemerkte, dass in der Taschenrechner-Demo von Stanford CS193p natürlich die IBOutlet-Verbindung vom Etikett in die Header-Datei gezogen wurde. Die IBAction-Verbindung wurde jedoch direkt in der M-Datei erstellt. Ich habe versucht, die Dokumentation durchzulesen und auf Google gesucht, konnte aber den Grund dafür nicht finden.IOS CS193p - Warum wurde die IBAction-Verbindung in die .m-Datei und nicht in die .h-Datei gezogen?

Ich würde argumentieren, dass IBAction digitPressed-Methode auch in der Header-Datei deklariert werden sollte (sollte es nicht Teil der Schnittstelle sein?).

Ich bin offensichtlich relativ neu zu Objective C (meist in Java gearbeitet), also bin ich sicher, dass ich etwas Grundlegendes vermisse.

Kann jemand bitte erklären?

Antwort

8

Das Deklarieren von Dingen in einer Header-Datei einer Klasse macht sie Teil der öffentlichen Schnittstelle. Dies umfasst Outlets und Aktionen, die auf einem View-Controller definiert sind.

Ob etwas veröffentlicht werden soll, ist eine Designfrage. Ein gutes Prinzip ist: nur wenn es sein muss. Mit ViewControllers Outlets und Aktionen müssen sie in den meisten Fällen nicht öffentlich sein und dürfen es auch nicht sein.

Was normalerweise passiert ist, dass Sie ein paar Vermutungen anstellen, was die öffentliche Schnittstelle enthalten sollte, dann (wenn Sie ein aufgeräumter Entwickler sind) schauen Sie sich noch einmal an, wenn die Implementierung gereift ist und entfernen Sie alles unwesentliche.

+3

Die IBOutlets in der .m-Datei deklarieren und in IB verknüpfen zu können, ist ziemlich neu. Demos und Tutorials haben nicht alle aufgeholt. Es ist definitiv die bessere Lösung und vermeidet sehr schlechte Praktiken wie das Ändern der IBOutlets eines anderen Objekts (was Sie niemals tun sollten). –

+0

@danh, kannst du erklären, warum Verkaufsstellen und Aktionen nicht öffentlich sein müssen? Wie greift die View im Controller auf diese zu, wenn diese nicht öffentlich sind? – Rahul

+1

ViewController kann ein verwirrender Name sein, wenn Sie in MVC geschult wurden. Es ist nicht, wie Sie vielleicht denken, eine Paarung von zwei Peers in diesem Akronym. Es ist besser, es als das Ding zu betrachten, das eine Ansicht steuert. In diesem Sinne macht es mehr Sinn, den Blick privat zu halten. Dies ist keine Regel oder natürlich nur eine übliche Praxis. View ist eine Eigenschaft des View-Controllers. Untergeordnete Klassen, die Sie erstellen, verfügen häufig über zusätzliche von ihnen gesteuerte Subviews. Diese Kontrolle ist normalerweise ziemlich absolut, da sie diese Kontrolle nicht mit anderen teilen. Lassen Sie mich ein wenig nach einer guten Referenz googlen, und ich werde es hier veröffentlichen. – danh