0

UITableViewのようなコントローラーがあります。

@interface FLWorkspaceViewController : UITableViewController

@property(nonatomic,retain) NSMutableArray* workspaces;

@end

その配列を別のコントローラーに設定しようとしました:

for(NSDictionary* workspace in workspaces)
        {
            NSLog(@"%@",workspace);
            [workspaceViewController.workspaces addObject:workspace];
        }

        [self.navigationController pushViewController:workspaceViewController animated:YES];

値を確認しましたが、存在します。を数えたら0なのですworkspacesviewDidLoad、これはなぜですか?

4

1 に答える 1

2

@propertyステートメントはポインタを作成しますが、実際のコンテンツは作成しません。私はあなたのコードにそれを見ないので:alloc initあなたはNSMutableArray *workspacesどこかにいますか?

編集:おそらく、workspaces配列を初期化する最良の方法は、を定義するクラスのgetterメソッドを使用すること@propertyです。怠惰な初期化が望ましい。@synthesizeステートメントを修正して、のようなものを読むのが最善@synthesize workspaces = i_workspaces;です。そうすれば、ゲッターを次のように書くことができます。

- (NSMutableArray *)workspaces {
    if (i_workspaces == nil) {
        NSMutableArray *i_workspaces = [[NSMutableArray alloc] initWithCapacity:3];
    }
    return i_workspaces;
}

容量ステートメントは、コンパイラーが最適化するのに役立つだけであり、正確である必要はありません。

于 2012-06-10T08:37:56.220 に答える