Iphone:线程问题?

时间:2010-07-13 16:53:49

标签: iphone cocoa-touch

我在viewDidLoad中初始化字典并使用它来创建表格视图单元格。

第一次加载正常。但是只要我滚动表格视图以查看项目(未显示在底部),应用程序就会崩溃。通过调试器,我注意到当我进行滚动时,字典项“rootItemsDict”的地址发生了变化。无法弄清楚为什么会这样。根据我的理解,初始化一次的对象的地址应保持相同,至少在给定的类实例中。有什么想法吗?

    - (void)viewDidLoad {
        [super viewDidLoad];

            NSString *path = [[NSBundle mainBundle] pathForResource:@"menu" ofType:@"plist"];
            rootItemsDict = [NSDictionary dictionaryWithContentsOfFile:path];
   } 



    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *title = (NSString *)[[[rootItemsDict objectForKey:@"rootMenuItems"] objectAtIndex:row] objectForKey:@"heading"];

1 个答案:

答案 0 :(得分:2)

+dictionaryWithContentsOfFile:返回一个自动释放的实例。要获得所有权,您需要明确保留它:

rootItemsDict = [[NSDictionary dictionaryWithContentsOfFile:path] retain];

...或使用alloc / init表单:

rootItemsDict = [[NSDictionary alloc] initWithContentsOfFile:path];

...或者如果您有合适的属性声明(retain),请使用setter:

self.rootItemsDict = [NSDictionary dictionaryWithContentsOfFile:path];

我建议您阅读Memory Management Programming Guide,尤其是object ownership上的部分。