Was ist falsch daran, eine Kategorie für NSObject zu verwenden, um eine Standardprotokollimplementierung bereitzustellen?

8

Ich habe nach einer Möglichkeit gesucht, optionale Protokollmethoden zu verwenden und sauberen Code zu verwenden. Mit anderen Worten:
1: Nein respondsToSelector: ruft ganz über meinen Code auf 2. Sollte für jede Methodensignatur funktionieren, also eine Kategorie-Methode für NSObject, die das Überprüfen und Aufrufen von performSelector: durchführt (und NSInvocation hat Probleme bei der Zusammenarbeit mit ARC) 3: Diese Lösung , IMO, gibt vor, universell zu sein, hat aber alle Nachteile von 1

Ich kam schließlich auf diese Idee:

%Vor%

Es scheint zu funktionieren, d.h.:

%Vor%

Während viele Orte online dieses Problem diskutieren, bin ich nicht auf diese Lösung gestoßen, die mich denken lässt, dass etwas nicht stimmt - ein wichtiger Fall, in dem es scheitern wird oder unvorhersehbar ist.

Sollte ich es einfach tun, oder sind meine Bedenken gültig?

    
executor21 12.10.2013, 00:55
quelle

1 Antwort

7

Methoden, die bestehenden Systemklassen hinzugefügt werden, sollten irgendwie vorangestellt werden. I.e. exec_myMethod oder exec_doSomethingToThis: . Also, deine Lösung verstößt dagegen.

Darüber hinaus bedeutet dies auch, dass eine Klasse das Verhalten der Standardmethode @optional nicht ablehnen kann (was im Grunde nichts ist, da Ihre Standardimplementierung eigentlich ein No-Op sein sollte).

Also, nein, insgesamt ist es nicht schrecklich falsch, eine Standardimplementierung bereitzustellen, die über die Regel Präfix hinzufügen hinausgeht, um Methoden über eine Kategorie zu bestehenden Klassen hinzuzufügen. Aber das ist keine harte Regel.

Der andere Nachteil ist, dass Sie den Namensraum der Methode verschmutzen. Dies wird ein Nachteil während der Entwicklung sein, da Xcode alle Methoden vervollständigt, was leicht vermieden werden kann, indem einfach die Deklarationen nicht offengelegt werden (die nicht offengelegt werden müssen). Zur Laufzeit bedeutet dies, dass respondsToSelector: für diese Methoden nicht geeignet ist, aber das ist von Anfang an so.

Immer noch ... es riecht nach dem olfaktorischen Zentrum dieses alten Timers.

    
bbum 15.10.2013 03:54
quelle