Вам необходимо хранить файлы mule-project.xml
, .classpath
и .project
в хранилище на тот случай, если вы не используете Maven.
Пожалуйста, проверьте / поделитесь файлом gitignore. Также проверьте Журнал ошибок , там должно быть описание того, чего не хватает.
Я вполне уверен причина, которую Вы сделали бы, это должно добавить, участники NSObject (скажите как, сохраняют и выпускают) к Вашему протоколу. Технически можно все еще отправить те сообщения так или иначе, но Вы получите предупреждение компилятора без него.
Когда Вы объявляете переменную как
id<MyProtocol> var;
компилятор Objective C знает только о методах в MyProtocol
и таким образом произведет предупреждение, при попытке назвать какой-либо из NSObject
методы, такой как -retain/-release
, на том экземпляре. Таким образом Какао определяет NSObject
протокол, который зеркально отражает NSObject
методы класса и методы экземпляра. Путем объявления этого MyProtocol
реализации NSObject
протокол, Вы даете компилятору подсказку что весь из NSObject
методы будут реализованы экземпляром, который реализует MyProtocol
.
Почему все это необходимо? Objective C позволяет объектам убывать от любого корневого класса. В Какао NSObject наиболее распространен, но не единственный корневой класс. NSProxy
также корневой класс, например. Поэтому экземпляр типа id
не обязательно наследовался NSObject
методы.
Также очень удобно, когда у Вас есть протоколы, которые имеют @optional
методы (например, "современный" Objective C, 2,0 делегата часто используют эту технику), Если Вы не включаете NSObject
протокол, Вы получите предупреждения, когда Вы попытаетесь звонить respondsToSelector:
на объекте.
Я никогда не делал этого в своем коде, но я видел преимущество для него. Если Вы передаете параметр как id <SomeProtocol>
необходимо будет переделать его, если Вы захотите назвать какой-либо из методов NSOBJECT на том объекте.
При использовании какого-либо из методов протокола NSObject тех, которые сохраняют, выпускают, классифицируют, имя класса, компилятор даст Вам предупреждения, если Ваш Протокол также не будет включать протокол NSObject.