首先,我遵循了本教程: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文件,如果它有帮助,它现在非常基本。
感谢
答案 0 :(得分:2)
是的,这个bug很常见。变化:
_properties = [NSMutableArray arrayWithArray:resultSet];
要:
_properties = [[NSMutableArray arrayWithArray:resultSet] retain];
或者保留财产并使用:
self.properties = [NSMutableArray arrayWithArray:resultSet];