2016-03-28 35 views
2

我只是想避免警告(沒有編譯器抑制),但不想添加一些包括我的文件。這裏是我的代碼:什麼是協議前向聲明的警告?

@protocol MyProto; 

// ... 

Protocol *p = @protocol(MyProto); 

這裏警告我:

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

沒有選擇。在定義類型之前,您不能在代碼中使用類型。這也適用於類。 – Avi

+0

@Avi看起來像'Protocol * p'將是零,以防MyProto協議在運行時不存在?也許這是什麼警告信息? – k06a

+0

不是。警告意味着它的含義。在定義它之前,您正在使用一種類型。編譯器警告你,它不能對協議的使用進行類型檢查,因爲它不知道該協議包含什麼。 – Avi

回答

1

使用文字協議(@protocol)需要鏈接到在編譯時的協議,這需要編譯器看到的定義協議。

我不明白你爲什麼不願意「添加一些包含到我的文件」。包含頭文件在使用該事件的實現文件中定義某些內容是非常正常的。不應該有缺點。

如果你想在運行時從字符串查找協議,你可以做類似NSProtocolFromString(@"MyProto")