【问题标题】:Objective-C ivar behaviourObjective-C ivar 行为
【发布时间】:2012-11-06 16:03:11
【问题描述】:

我对我在 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 实例,而 _arrayOfPageNosWithSummaryElements 未初始化并因此设置为 nil?

我做错了什么?谢谢。

【问题讨论】:

    标签: objective-c class properties


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      @implementation HPSFormController
      NSArray* _arrayOfPageNosWithSummaryElements;
      

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

      @implementation HPSFormController {
         NSArray* _arrayOfPageNosWithSummaryElements;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多