IOS代理協議與委託

  • 總結delegate和protocol關係拿來給大家分享一下:

    • 把自己不想幹的一些事情(洗衣做飯)找個助手來幫助你做,而你要的這個助手得有一定的能力,不是任何一個人都可以的,所以你就得有個招聘要求。協議(protocol)就類似於你的招聘要求,你找到的助手就是代理(delegate)。 這樣就有了我.delegate = 助手;好了這樣以後再有洗衣做飯的活直接找助手做就可以了。
  • 協議不是類,以@protocol關鍵字聲明, 協議有兩個對象:代理者和委託者。

  • 代理者:實現協議的某個方法。
  • 委託者:用自己的方法制定要實現協議的方法的對象。

    • 協議的兩個預編譯指令@optional:可以選擇的方法。@required:必須執行的方法。
  • 寫個小例子:

協議:MyDelegte.h

    @protocol MyDelegate <NSObject>

    -(NSString *)getString;

    @end
// 委託類:

 ViewController.h

  #import "MyDelegte.h"
  @interface ViewController:UIViewController
    @property(nonatimic)id<MyDelegate>delegate;
  @end 


ViewController.m

  -(void)viewDidLoad{
      SecondViewController *second = [[SecondViewController alloc]init];
      self.delegate = second; // 指定代理對象second
      NSString *str = [self.delegate getString]; // 獲得代理方法的返回值。
  }
代理類:

  SecondViewController.h

  #import "SetStringDelegate.h"
  @interface SecondViewController:UITableBarController<SetStringDelegate>
  @end

  SecondViewController.h

  -(NSString *)setString{
      return @"helloWorld";
  }
// 簡單的代理回調也可以把代理對象設置爲自身,可以在自身中實現協議方法。

@protocol MyDelegte <NSObject>

   -(NSString *)setString;

@end

@protocol MyDelegate

@property(nonatomic,assign)id<MyDelegate>delegate;

-(NSString *)setString;

@end

@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章