我真的很困惑 prepareForSegue 在弱/强属性上会发生什么。让我解释:
我有两个简单的视图控制器:
- 视图控制器1
- 视图控制器2
与从 ViewController1 到 ViewController2的一个 segue连接。
两个视图控制器都有两个属性:
@property (nonatomic, weak) NSArray *simpleArray;
@property (nonatomic, weak) NSString *simpleString;
我无法理解的是,在我的 prepareForSegue 中 NSArray 变为 null 但 NSString 不是。这是来自 ViewController1 的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.simpleString = @"string";
self.simpleArray = [NSArray arrayWithObjects:@"string2", @"string3", nil];
NSLog(@"ViewDidLoad - simpleString: %@, simpleArray: %@", self.simpleString, self.simpleArray);
}
#pragma mark - segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"PrepareForSegue - simpleString: %@, simpleArray: %@", self.simpleString, self.simpleArray);
if ([[segue identifier] isEqualToString:@"segue"])
{
ViewController2 *vc = (ViewController2 *)segue.destinationViewController;
vc.simpleString = self.simpleString;
vc.simpleArray = self.simpleArray;
}
}
2015-07-07 17:23:12.915 测试[3675:147600] ViewDidLoad - simpleString: string, simpleArray: (string2, string3)
2015-07-07 17:23:14.521 测试[3675:147600] PrepareForSegue - simpleString: string, simpleArray: (null)
如果我将 NSArray 属性设置为强,它会保持该值。
那么,为什么两个弱属性有不同的行为呢?