我的应用程序收到内存警告,因为它需要大量内存。我试着释放每一次分配。然而,有时我不知道该怎么做。
例如:我有两对.h和.m文件。其中一个与服务器建立连接,另一个与本地SQLite建立连接。
通常,从这些文件调用方法的代码如下所示:
-(NSMutableArray *) getRecentActivity{
LocalStorageController *local = [[LocalStorageController alloc]init];
return [local getRecentActivity];
}getRecentActivity返回一个NSMutableArray。
在这段代码中,我们可以看到我为LocalStorageController分配了内存,但我从未调用过release方法,所以我想,我调用该函数的次数越多,分配的内存就越多。
如果我在init之后调用autorelease,它会崩溃。
此外,我通常会使用另一种代码:
ServerConnection *serv = [[ServerConnection alloc]init];
NSMutableArray list = [serv getMyListOfContacts];它使用ASIHTTPRequest,如果我在第二行之后调用[serv release];,应用程序崩溃,EXC_BAD_ACCESS指向ASIHTTPRequest库中的一行。
该如何处理这种情况呢?
非常感谢!
发布于 2012-02-06 03:11:27
第一种情况很简单;
-(NSMutableArray *) getRecentActivity{
LocalStorageController *local = [[LocalStorageController alloc]init];
NSMutableArray *tmp = [local getRecentActivity];
[local release];
return tmp;
}第二种情况很难在没有看到更多实际代码的情况下以一般的方式解决。
发布于 2012-02-06 04:12:47
使用服务器作为属性可以修复此保留/释放问题。
在您的.h中:
@property (nonatomic, retain) ServerConnection *server;在您的.m中:
@synthesize server;
- (void)dealloc {
[server release];
// The rest of your releases here...
[super dealloc];
}
- (void)yourMethod {
ServerConnection *myServConnection = [[ServerConnection alloc] init];
self.serv = myServConnection;
[myServConnection release];
NSMutableArray list = [self.serv getMyListOfContacts];
}从那时起,只要在这个类中继续使用self.serv,就不会有对象被释放的问题。
https://stackoverflow.com/questions/9152077
复制相似问题