2009-09-25 4 views
12

Ich habe einen Anruf wie folgt [Class-Methode] und eine Warnung sagen, dass Klasse nicht Antwort auf "Methode" Nachricht kann.Wie kann ich die Warnung in xcode auf einer bestimmten Leitung deaktivieren?

Die "Methode" Nachricht existiert zwar nicht, aber mein Code verwendet unbekannte Nachricht abfangen (mit forwardingTargetForSelector) so wird es gut laufen und es ist Build, um so zu laufen. Wie kann ich diese nervige Warnung verbergen?

Antwort

16

Wenn Sie eine möglicherweise unimplemented Nachricht an ein Objekt senden mögen, und Sie wissen, dass Sie Fehler zu fangen gehen, können Sie den Aufruf verwenden sollen:

id myClone = [anObject performSelector:@selector(copy)]; 

Das erklärt Deine Absicht ist direkter, dass du eine Methode nennst, die vielleicht nicht existiert, und du bist damit einverstanden. Dies ist ein deutlicherer Weg, dies zu tun, als die Warnung zu unterdrücken oder die Methode zu fälschen.

+0

Danke. Ich denke, es wäre weniger effizient, wenn ich bei jedem Anruf einen Selektor erstellen müsste. Es sei denn, ich erkläre alle meine @selector für alle. – CodeFlakes

+1

Der Leistungsunterschied ist praktisch nicht nachweisbar. Wenn Sie besorgt sind, profilieren Sie es. Nicht vorzeitig optimieren. –

+2

'performSelector' funktioniert nur für Methoden, deren Argumenttypen und Rückgabetyp alle Objekte sind; und wer nur 0, 1 oder 2 Argumente haben – user102008

3

Sie könnten eine Kategorie definieren, die diese Methode deklariert. Würde die Definition zum Zeitpunkt der Kompilierung in den Geltungsbereich fallen, würde die Warnung vermieden. So etwas wie

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here