我有两个UIViewControllers.在ViewController中我有代码: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{if ([segue.identifier isEqualToString:@"ToResetPwd_NumberSegue"]){ ResetPwdBySmsCodeViewController* vc =
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"ToResetPwd_NumberSegue"]) { ResetPwdBySmsCodeViewController* vc = (ResetPwdBySmsCodeViewController*)[segue destinationViewController]; vc.phone_no = _TF_phoneOrEmail.text;//TF_phoneOrEmail is a UITextField vc.test = @"dagaga"; } }
在B .h
我有代码
@interface ResetPwdBySmsCodeViewController : UIViewController<UITextFieldDelegate> @property (weak, nonatomic) NSString *phone_no; @property (weak, nonatomic) NSString *test; @end
在B .m
我可以得到_test的值,但不能_phone_no
我确信vc.phone在prepareForSegue中很好用
您应该将B ViewController中的2个属性声明为强大或更好的副本:@interface ResetPwdBySmsCodeViewController : UIViewController<UITextFieldDelegate> @property (strong, nonatomic) NSString *phone_no; @property (strong, nonatomic) NSString *test; @end
您可以获得_test的原因是您为其分配了一个文字字符串值,该值由编译器在特定内存区域中分配.因此它永远不会被释放,弱变量将无限期地指向它(直到你明确地为_test分配一个新值,即.)
另一方面,当你访问weak属性时,你可以从另一个可能不存在的对象中为vc.phone_no分配一个属性(因为当它指向的对象被解除分配时,弱属性是nil-ed.)因此需要强大的或复制.