Ich bin ziemlich neu in Objective-C, habe aber ziemlich viel Erfahrung in C#. Ich versuche einige Abhängigkeiten-Injection-Frameworks in Objective-C zu überprüfen. Beim Betrachten einiger Frameworks habe ich etwas ganz anderes in Bezug auf die Konstruktoren/Initialisierer in einer Objective-C-Klasse gefunden.Ambiguität mit Objective c Initialisierer
Wenn ich will, wie unten, um ein Objekt durch einen Konstruktor injizieren
-(id)initWithService:(id<ServiceProtocol>)service;
natürlich dies ist der Default-Konstruktor nicht und die Steuerung wird hier nicht geben, bis diese von einem anderen Ort genannt wird.
Nur -(id)init
ist der Standardkonstruktor und das Steuerelement wird hier eingefügt, wenn dieses Objekt injiziert wird.
Also frage ich mich, ob es eine gute Praxis ist, initWithService
von -(id)init
zu nennen?
Oder für jede Klasse haben nur zwei Initialisierer den Initialisierer mit Konstruktor nur während Mocking und ignorieren sie während der automatischen Initialisierung durch das Framework?
ich wirklich nicht Ihr Szenario genau folgen, aber ich werde meine Meinung sagen, dass, wenn Sie mache etwas anderes, nur um ein spöttisches Werkzeug zu befriedigen, du machst es falsch. – Avi
Um ehrlich zu sein, ich möchte kein Werkzeug als solches verwenden. Dies ist eine klare Frage von Ziel-C. Was würden Sie tun, wenn Sie nicht init initialisieren können, aber Sie können nur init. – golldy
Klingt so, als ob Sie 'initWithService:' [Ihren Initialisierer] (http://stackoverflow.com/a/26186421/2976878) und vielleicht sogar [make 'init' nicht verfügbar machen] (https://craftbeercraftcode.com) machen möchten/2014/12/28/better-brew-with-ns_unavailable /) wenn du keinen Standardwert dafür hast. – Hamish