Das Problem ist nicht Größe, sondern Verantwortung. Trägt Ihr Controller mehr als einen Hut? Wenn ja, sprengen Sie es in mehrere Controller für einen Job pro Klasse.
Kategorien helfen mit Größe, aber nicht Verantwortung. Wenn Sie immer noch mehrere Dinge in einer (amalgamierten) Klasse machen, dann haben Sie immer noch ein Problem; Verschieben sie in separate Dateien hat es nicht gelöst.
Wenn viele Kategorien in einer einzigen Klasse enthalten sind, besteht das Risiko von Methodenkollisionen: Die gleiche Methode wird in mehreren Kategorien implementiert, wahrscheinlich durch die Implementierung in Kategorie B. Vergessen Sie jedoch, dass Kategorie A bereits vorhanden ist. Dies führt zu einem Problem, wenn das Objekt sich selbst eine Nachricht sendet, die Antwort einer Kategorie auf diese Nachricht erwartet und die andere bekommt.
Die Deklaration aller der Kategorien im Hauptklassenkopf mildert dieses Risiko, da Sie sehen können, dass eine andere Kategorie bereits eine Methode mit dem Namen hat, den Sie eingeben möchten. Jede Methode, die Sie hinzufügen und dadurch die Header-Datei verlängert, verringert jedoch die Mitigation.
Wenn Ihr Controller mehr als einen Hut trägt, teilen Sie ihn in mehrere Klassen auf.
Ich empfehle Martin Fowlers Buch "Refactoring". Refactoring Ihres Codes ist es zu bereinigen, und zu große Klassen (und Methoden und Funktionen) in die Luft zu sprengen ist eine Teilmenge solcher Aufräumarbeiten.
Natürlich, mehrere Klassen, die einmal eins waren, benötigen einen Ersatz für die Kommunikation, die zuvor intern innerhalb der Klasse war.Cocoa bietet eine Reihe von Lösungen:
Sie brauchen nicht um genau einen auszuwählen, noch müssen Sie sie alle benutzen. Welche Lösungen angemessen sind, hängt davon ab, welche Kommunikationsanforderungen Ihre neuen Klassen haben müssen.
Ich bin nicht vertraut mit Cocoa, aber ich habe das gleiche "Problem" in PHP mit dem MVC-Setup, also denke ich, es gilt auch für verschiedene Sprachen. Ich habe über Sub-Controller für verschiedene Teile nachgedacht, aber das würde das Ganze nur viel komplexer machen. Und auf diese Weise können Sie im Grunde weiter bohren, bis Sie einen Sub-Sub-Sub-Sub-Controller haben, wenn Sie etwas Großes schreiben, und das wird nur sehr schwer zu pflegen. Neugierig zu sehen, welche Lösungen kommen :) – Alec