Objective-C ivar行为

时间:2012-11-06 16:03:11

标签: objective-c class properties

我对在Objective-C中看到的一些行为感到困惑。

我有一个方法如下:

-(void)showFormWithId:(NSString*)formId andMode:(int)mode
{
    HPSModelForm* model = [HPSDbUtilities getForm:formId];
    HPSFormController* formVC = [ [ HPSFormController alloc ] init ];
    [(UINavigationController*) self.view.window.rootViewController pushViewController:formVC animated:YES];


}

在HPSFormController类中,我的实现包含以下内容:

@implementation HPSFormController
NSArray* _arrayOfPageNosWithSummaryElements;

即。 _arrayOfPageNosWithSummaryElements不是属性,但是对于HPSFormController类中的任何方法都是可见的ivar。它根本没有在头文件中声明。

当我第一次调用showFormWithId时,_arrayOfPageNosWithSummaryElements为nil。但是,当我第二次调用showFormWithId时,在我看来_arrayOfPageNosWithSummaryElements不是nil,而是具有来自HPSFormController的前一个实例的值。我不明白这一点 - 当然因为formVC的范围是showFormWithId方法然后我第二次调用showFormWithId然后应该创建一个全新的HPSFormController实例,并且_inrayOfPageNosWithSummaryElements未初始化,因此设置为nil?

我做错了什么?感谢。

2 个答案:

答案 0 :(得分:3)

实际上它根本不在实例变量中(实例变量在类的interface部分中声明)。你在正常的C意义上声明了一个全局变量。

答案 1 :(得分:0)

@implementation HPSFormController
NSArray* _arrayOfPageNosWithSummaryElements;

不是ivar声明,而是全局变量的声明。你必须使用括号:

@implementation HPSFormController {
   NSArray* _arrayOfPageNosWithSummaryElements;
}