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修飾變量來防止循環引用