在外部声明时,变量被传递给推送的ViewController

时间:2014-08-26 13:34:59

标签: ios objective-c uiviewcontroller

我有一个简单的例子:

  1. NavViewController
  2. 的ViewController
  3. ViewController2
  4. 在ViewController中:

    #import "ViewController.h"
    #import "ViewController2.h"
    
    @interface ViewController ()
    
    @end
    
    NSArray *array;// Neither in @interface nor in @implementation 
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        array = [[NSArray alloc] initWithObjects:@"12345", nil];
    
        ViewController2 *vc = [[ViewController2 alloc] init];
        [self.navigationController pushViewController:vc animated:YES];
    }
    

    在ViewConroller2中:

    #import "ViewController2.h"
    
    @interface ViewController2 ()
    
    @end
    
    NSArray *array;
    
    @implementation ViewController2
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
    
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        NSLog(@"%@",array);
    
    
    }
    

    我不明白为什么viewController2中的数组从viewController传递数据? 可以解释一下吗?

    伙计我知道如何将数据传递给另一个带有属性的viewController。我想了解为什么,在这种情况下,数据已被转移!

2 个答案:

答案 0 :(得分:1)

因为您已将NSArray *array;声明为全局变量。并且,只要变量在源文件中的某处定义,链接器就能够找到它并将其他源文件中的所有引用适当地链接到定义。

我们还使用extern

声明全局变量
extern int GlobalVar;

这里,extern告诉编译器这只是一个声明,即GlobalVar标识的int类型的对象存在,并且链接器的工作要确保。

在您的某个源文件中,您可以说

int GlobalVar = 7;

我相信这就是你的理由。

答案 1 :(得分:0)

当您在@interface or @implementation之外声明变量时,它被认为是static variable因此它有效。把它放在里面是行不通的。

@interface ViewController ()
{
 NSArray *array;
}
@end

试试这个而不是你的代码