一些视图更改后,三十二个应用程序崩溃

时间:2010-02-25 21:19:15

标签: iphone objective-c cocoa-touch three20

首先,我遵循了本教程:three20 github tutorial

我认为存在内存管理问题,这会导致我的应用程序崩溃。

我认为,我的postsModel中的_properties会崩溃我的应用程序。

我第一次启动应用程序并将视图更改为postsTableViewController时工作得很好。我创建了一个TTLauncherView,改回这个viewcontroller会崩溃我的应用程序。

这里现在是我的postsModel的一些代码

// .h
@interface postsModel : TTURLRequestModel {
     NSMutableArray *_properties;
}
@property (nonatomic, readonly)NSMutableArray *properties;

// .m
@synthesize properties = _properties;   
- (void)requestDidFinishLoad:(TTURLRequest*)request {
     TTURLDataResponse* response = request.response;
     NSString* responseBody = [[NSString alloc] initWithData: response.data encoding: NSUTF8StringEncoding];

     NSDictionary *json =  [responseBody JSONValue];
     TT_RELEASE_SAFELY(responseBody);

     NSMutableArray *resultSet = [json objectForKey:@"posts"];
     TT_RELEASE_SAFELY(_properties);
     _properties = [NSMutableArray arrayWithArray:resultSet];
     TT_RELEASE_SAFELY(resultSet);

     [super requestDidFinishLoad:request];
}


- (void)dealloc {
     TT_RELEASE_SAFELY(_properties);

     [super dealloc];
}

删除我的_properties的tt_release会停止通过从此视图返回到Launcher视图来崩溃应用程序,但再次单击我的TableView会再次崩溃应用程序。

它有点难以为我写下来,因为它有很多代码。我也可以提供我的应用程序作为.zip文件,如果它有帮助,它现在非常基本。

感谢

1 个答案:

答案 0 :(得分:2)

是的,这个bug很常见。变化:

_properties = [NSMutableArray arrayWithArray:resultSet];

要:

_properties = [[NSMutableArray arrayWithArray:resultSet] retain];

或者保留财产并使用:

self.properties = [NSMutableArray arrayWithArray:resultSet];