2

弱い/強いプロパティで prepareForSegue で何が起こるかについて、私は本当に混乱しています。説明させてください:

私は2つの単純なView Controllerを持っています:

  • ViewController1
  • ViewController2

ViewController1 から ViewController2 への 1 つのセグエで接続されています。

どちらのビュー コントローラーにも次の 2 つのプロパティがあります。

@property (nonatomic, weak) NSArray *simpleArray;
@property (nonatomic, weak) NSString *simpleString;

私が理解できないのは、私の prepareForSegue で NSArray が null になるが、NSString が null にならないことです。これは 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: 文字列、simpleArray: ( string2、string3 )

2015-07-07 17:23:14.521 テスト [3675:147600] PrepareForSegue - simpleString: 文字列、simpleArray: (null)

NSArray プロパティを strong に設定すると、値が維持されます。

では、なぜ 2 つの弱いプロパティの動作が異なるのでしょうか?

4

0 に答える 0