1.屬性傳值
第一步:在SecondViewController.h中定義一個(gè)字符串屬性
@property (copy, nonatomic) NSString *string;
第二步:在點(diǎn)擊FirstViewController按鈕的方法里面給字符串屬性賦值
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.string = _textField.text;
第三步:在SecondViewController中使用字符串屬性給textField賦值
_textField.text = _string;
2.協(xié)議傳值
第一步:聲明協(xié)議
@protocol SecondViewControllerDelegate <NSObject>
- (void)changeValue:(NSString *)text;
@end
第二步:聲明代理人
@property (assign, nonatomic) id<SecondViewControllerDelegate> delegate;
第三步:執(zhí)行協(xié)議方法
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(changeValue:)]) {
[self.delegate changeValue:_textField.text];
}
第四步:簽訂協(xié)議
@interface ViewController () <SecondViewControllerDelegate>
第五步:指定代理人
secondVC.delegate = self;
第六步:實(shí)現(xiàn)協(xié)議方法
- (void)changeValue:(NSString *)text {
_textField.text = text;
}
3.block傳值
第一步:重定義block
typedef void (^Block)(NSString *text);
第二步:聲明屬性
@property (copy, nonatomic) Block block;
第三步:實(shí)現(xiàn)block
secondVC.block = ^(NSString *text) {
_blockTextField.text = text;
};
4.block內(nèi)存管理
- 沒有使用局部變量的block內(nèi)存存儲在全局區(qū)
- 使用局部變量的block內(nèi)存存儲在棧區(qū)
- 當(dāng)block變量定義為屬性挑辆,必須用copy修飾,否則會造成野指針
- 當(dāng)不是用block時(shí)硬毕,需要使用Block_RElease()進(jìn)行銷毀
- 在非arc下使用__block修飾變量來防止循環(huán)引用
- 在arc下使用__week修飾變量來防止循環(huán)引用