簡體   English   中英

Objective-C ivar行為

[英]Objective-C ivar behaviour

我對在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時,應該使用未初始化_arrayOfPageNosWithSummaryElements的HPSFormController創建一個全新的實例,因此將其設置為nil嗎?

我究竟做錯了什么? 謝謝。

它實際上根本不是實例變量(實例變量在類的interface部分中聲明)。 在正常的C語言中,您是在聲明全局變量。

@implementation HPSFormController
NSArray* _arrayOfPageNosWithSummaryElements;

不是ivar聲明,而是全局變量的聲明。 您必須使用方括號:

@implementation HPSFormController {
   NSArray* _arrayOfPageNosWithSummaryElements;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM