我有一个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];
我检查过这些值并且它们存在。当我在workspaces
中计算viewDidLoad
时,它为0.为什么会这样?
答案 0 :(得分:2)
@property
语句为您创建指针,但不是实际内容。由于我在您的代码中没有看到它:您alloc init
某个地方是NSMutableArray *workspaces
吗?
编辑:初始化workspaces
数组的最佳方法可能是在定义@property
的类中的getter方法。懒惰的初始化是可取的。最好修改你的@synthesize
语句,阅读类似@synthesize workspaces = i_workspaces;
的内容,然后你就可以这样编写你的getter:
- (NSMutableArray *)workspaces {
if (i_workspaces == nil) {
NSMutableArray *i_workspaces = [[NSMutableArray alloc] initWithCapacity:3];
}
return i_workspaces;
}
容量语句只是帮助编译器进行优化,但不一定非精确。