1.属性传值
第一步:在SecondViewController.h中定义一个字符串属性
@property (copy, nonatomic) NSString *string;
第二步:在点击FirstViewController按钮的方法里面给字符串属性赋值
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.string = _textField.text;
第三步:在SecondViewController中使用字符串属性给textField赋值
_textField.text = _string;
2.协议传值
第一步:声明协议
@protocol SecondViewControllerDelegate <NSObject>
- (void)changeValue:(NSString *)text;
@end
第二步:声明代理人
@property (assign, nonatomic) id<SecondViewControllerDelegate> delegate;
第三步:执行协议方法
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(changeValue:)]) {
[self.delegate changeValue:_textField.text];
}
第四步:签订协议
@interface ViewController () <SecondViewControllerDelegate>
第五步:指定代理人
secondVC.delegate = self;
第六步:实现协议方法
- (void)changeValue:(NSString *)text {
_textField.text = text;
}
3.block传值
第一步:重定义block
typedef void (^Block)(NSString *text);
第二步:声明属性
@property (copy, nonatomic) Block block;
第三步:实现block
secondVC.block = ^(NSString *text) {
_blockTextField.text = text;
};
4.block内存管理
- 没有使用局部变量的block内存存储在全局区
- 使用局部变量的block内存存储在栈区
- 当block变量定义为属性,必须用copy修饰,否则会造成野指针
- 当不是用block时,需要使用Block_RElease()进行销毁
- 在非arc下使用__block修饰变量来防止循环引用
- 在arc下使用__week修饰变量来防止循环引用