我有一个简单的例子:
在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。我想了解为什么,在这种情况下,数据已被转移!
答案 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
试试这个而不是你的代码