Я вижу, как пример Apple здесь, вероятно, смутил вас здесь.Сначала загрузите полный исходный код iPhoneCoreDataRecipes (или, по крайней мере, сделайте ссылку на него, пытаясь понять этот код).
Чтобы действительно понять, что здесь происходит, вы должны прочитать далеераздел «Отклонение представленного контроллера представления», а затем перейдите по ссылке «Использовать делегирование для связи с другими контроллерами».(«Делегация?» Очень странно ....)
Итак, вот что происходит.Представленное представление имеет «делегата», который является объектом, которому он должен рассказывать «интересные» вещи.В данном случае «интересными» вещами являются «эй, я добавил рецепт!»Для достижения этого делегат реализует протокол, который просто означает, что он обещает реализовать некоторые методы.В этом случае обязательный метод recipeAddViewController:didAddRecipe:
.
AddViewController
имеет свойство delegate
, например:
@property(nonatomic, assign) id <RecipeAddDelegate> delegate;
Это просто означает, что делегат должен соответствовать именованномупротокол.Сам делегат указывает, что он делает это в своем интерфейсе:
@interface RecipeListTableViewController : UITableViewController <RecipeAddDelegate, NSFetchedResultsControllerDelegate> {
Обратите внимание, что это помечено assign
по причинам, объясняемым @Yuras.Но если вы пишете новый код для iOS 5, вам следует использовать weak
вместо assign
.Свойства weak
автоматически устанавливаются на nil
, если их объект, на который делается ссылка, освобожден.Так безопаснее.Нет висящих указателей.