2016-03-28 7 views
2

Ich möchte nur Warnung (ohne Compiler-Unterdrückung) vermeiden, aber nicht einige Includes zu meiner Datei hinzufügen. Hier ist mein Code:Was für eine Warnung mit Protokoll Vorwärtsdeklaration?

@protocol MyProto; 

// ... 

Protocol *p = @protocol(MyProto); 

Hier warnt ich habe:

@protocol is using a forward protocol declaration of MyProto [-Wat-protocol] 
+1

Keine Wahl. Sie können einen Code nicht eingeben, bevor Sie den Typ definiert haben. Dies gilt auch für Klassen. – Avi

+0

@Avi sieht aus wie 'Protokoll * p' wird Null sein, falls das Protokoll' MyProto' in Laufzeit nicht existiert? Vielleicht ist das was Warnmeldung über? – k06a

+0

Nein. Die Warnung bedeutet, was sie bedeutet. Sie verwenden einen Typ, bevor Sie ihn definieren. Der Compiler warnt Sie, dass er Ihre Verwendung des Protokolls nicht überprüfen kann, da er nicht weiß, was das Protokoll enthält. – Avi

Antwort

1

unter Verwendung eines Protokolls wörtliche (@protocol) erfordert das Protokoll zum Zeitpunkt der Kompilierung Verknüpfung, die der Compiler erfordert die Definition zu sehen das Protokoll.

Ich verstehe nicht, warum Sie abgeneigt sind, "einige Includes zu meiner Datei hinzuzufügen". Es ist sehr normal, Headerdateien einzuschließen, die etwas in einer Implementierungsdatei definieren, die dieses Ding verwendet. Es sollte keinen Nachteil geben.

Wenn Sie das Protokoll zur Laufzeit aus einer Zeichenfolge suchen möchten, können Sie etwas wie NSProtocolFromString(@"MyProto") tun.

Verwandte Themen