我对在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?
我做错了什么?感谢。
答案 0 :(得分:3)
实际上它根本不在实例变量中(实例变量在类的interface
部分中声明)。你在正常的C意义上声明了一个全局变量。
答案 1 :(得分:0)
@implementation HPSFormController
NSArray* _arrayOfPageNosWithSummaryElements;
不是ivar声明,而是全局变量的声明。你必须使用括号:
@implementation HPSFormController {
NSArray* _arrayOfPageNosWithSummaryElements;
}