0

我对我在 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 为零。但是,当我第二次调用 showFormWithId 时,在我看来 _arrayOfPageNosWithSummaryElements 不是 nil,而是具有上一个 HPSFormController 实例的值。我不明白这一点 - 肯定是因为 formVC 的范围是 showFormWithId 方法,然后我第二次调用 showFormWithId 然后应该创建一个全新的 HPSFormController 实例,而 _arrayOfPageNosWithSummaryElements 未初始化并因此设置为 nil?

我究竟做错了什么?谢谢。

4

2 回答 2

3

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

于 2012-11-06T16:05:16.833 回答
0
@implementation HPSFormController
NSArray* _arrayOfPageNosWithSummaryElements;

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

@implementation HPSFormController {
   NSArray* _arrayOfPageNosWithSummaryElements;
}
于 2012-11-06T16:06:19.047 回答