instantiateViewControllerWithIdentifier后实例变量不是nil?

时间:2015-02-07 00:17:12

标签: ios objective-c

我有一个名为ContentViewControllerPartial的课程UIViewController。我使用了几次实例化它 content = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentViewControllerPartial"]; 希望每次都能得到一个新实例。

在我班上我有一个实例变量:

@implementation ContentViewController ... AVPlayer* mPlayerAV;

在viewDidLoad期间实例化:

- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    if ( !mPlayerAV )
    {
       mPlayerAV = [AVPlayer playerWithURL: videoURL];
    }

令我惊讶的是,我的每个ContentViewControllerPartial类共享同一个mPlayerAV实例!这显然是因为它在第二和第三次实例中并不是零。

只有当我将mPlayerAV转换为属性时,我才得到预期的行为 - mPlayerAV不再在实例之间共享,并且为零。

这里发生了什么?为什么在实例之间共享私有实例变量?

1 个答案:

答案 0 :(得分:1)

如果不将实例变量放在{}中,则会创建全局变量而不是实例变量。

帖子 here 为iVars做了很多不应做的事情。

根据提供的代码判断,我相信这解释了奇怪的行为。我希望有所帮助。