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 は nil になります。ただし、showFormWithId をもう一度呼び出すと、_arrayOfPageNosWithSummaryElements は nil ではなく、HPSFormController の前のインスタンスの値を持っているように見えます。私はこれを理解していません.formVCのスコープはshowFormWithIdメソッドであるため、2回目にshowFormWithIdを呼び出すと、_arrayOfPageNosWithSummaryElementsを初期化せずにnilに設定して、HPSFormControllerの完全に新しいインスタンスを作成する必要がありますか?

私は何を間違っていますか?ありがとう。

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 に答える