[英]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.