iOS 代理模式

2019-02-12  本文已影响19人  HH思無邪
代理模式.png

一、何为代理模式?

关键点如下:

口水话解释: 苹果-委托方,苏宁-代理方,代理权合同-协议,苹果按照协议向苏宁收取分成,苏宁得遵守这个协议苹果才给他代理权给他手机卖,苏宁遵守协议得到代理权卖手机,得到协议规定的分成部分。

二、使用

@protocol YHUMshareviewDelegate <NSObject>
@optional //默认修饰符
- (void)didSelectItemAtIndex:(NSInteger)index;
@end

@interface YHUMshareAlertView : UIView
@property (nonatomic, weak) id <YHUMshareviewDelegate> delegate;//声明代理
@end

协议的修饰符 @optional和@required
创建一个协议如果没有声明,默认是@required状态的。这两个修饰符只是约定代理是否强制需要遵守协议,
如果@required状态的方法代理没有遵守,会报一个黄色的警告,只是起一个约束的作用,没有其他功能

代理属性使用weak 为什么呢?
避免循环引用;
为什么会循环引用?
EG:tableViewController中,控制器的view就是tableView,这就相当于tableViewController强引用着tableView(代理对象);
然后
当我们设置delegate的时候,一般都是让tableViewController成为代理,这个时候代理如果也使用strong,那么tableView的delegate又强引用着tableViewController,所以导致循环引用,因此代理得用weak!

/**
     * self.delegate 判断一下控制器有没有遵守协议设置代理
     * [self.delegate respondsToSelector:@selector(didSelectItemAtIndex:)]判断有没有实现这个代理方法
     */
 if (self.delegate && [self.delegate respondsToSelector:@selector(didSelectItemAtIndex:)]) {
       [self.delegate didSelectItemAtIndex:indexPath.row];
    }
 // 首先是要遵守这个协议
@interface YHHomepageVC ()<YHUMshareviewDelegate>
// 然后要设置代理者为当前对象(self)

        self.shareView.delegate = self;
//实现协议中规定的方法
#pragma -mark ———————————YHUMshareviewDelegate——————————————————
- (void)didSelectItemAtIndex:(NSInteger)index
{
    [_shareView  disAlterview];
}

三、代理模式总结

上一篇 下一篇

猜你喜欢

热点阅读