iOS中傳值的方法有這些
1.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。
2.代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。
3.block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起来逻辑清晰代码整齐。
4.target action:通过将对象传递到另一个类中,在另一个类中将该对象当做target的方式,来调用该对象方法,从内存角度来说和代理类似。
5.KVO:NSObject的Category-NSKeyValueObserving,通过属性监听的方式来监测某个值的变化,当值发生变化时调用KVO的回调方法。
代理
iOS代理在傳值中也很常用(但是我還是喜歡block),不管怎麼說這個代理也得會吧,面試又問的呀。畢竟代理也有自己的好處。
寫代理記住了流程就是:主動方指定代理實現代理的方法,被動方接受代理。
主動方:.h
@protocol TopButDelegate <NSObject>//协议
- (void)transButIndex:(NSInteger)index;//协议方法
@end
@interface AddressBarView : UIView
@property (nonatomic, assign) id<TopButDelegate>delegate;//代理属性
.m
//代理方法, 通过BUT 下标 来滑动视图
- (void)ClickBut:(UIButton *)sender{//按鈕或者其他點擊事件
if (self.delegate && [self.delegate respondsToSelector:@selector(transButIndex:)]) {
//代理存在且有这个transButIndex:方法
[self.delegate transButIndex:sender.tag - 100];
}
}
被動方:接受代理
@interface B ()<TopButDelegate>
@property (nonatomic, retain) person * bar; //A类
- (void)viewDidLoad {
self.bar = [[person alloc] init];
[self.view addSubview: self.bar];
self.bar.delegate = self;//给A类的代理属性给self(B类),这样B就可以执行协议方法啦
}
//执行协议方法
- (void)transButIndex:(NSInteger)index
{
}