1

我的应用程序收到内存警告,因为它需要大量内存。我尝试释放每个分配。但是,有时我不知道该怎么做。

例如:我有两对 .h 和 .m 文件。其中一个与服务器建立连接,另一个与本地 SQLite 建立连接。

通常,从这些文件调用方法的代码是这样的:

-(NSMutableArray *) getRecentActivity{
    LocalStorageController *local = [[LocalStorageController alloc]init];
    return [local getRecentActivity];
}

getRecentActivity 返回一个 NSMutableArray。

好吧,在那段代码中,我们可以看到我正在为 LocalStorageController 分配内存,但我从不调用 release 方法,所以我想,我调用该函数的次数越多,我将分配的内存就越多。

如果我在初始化后调用 autorelease,它会崩溃。

此外,通常,我使用这种其他类型的代码:

    ServerConnection *serv = [[ServerConnection alloc]init];
    NSMutableArray list = [serv getMyListOfContacts];

它使用 ASIHTTPRequest,如果我[serv release];在第二行之后调用,应用程序会崩溃,EXC_BAD_ACCESS 指向 ASIHTTPRequest 库中的一行。

假设如何处理这种情况?

非常感谢!

4

2 回答 2

2

第一种情况很简单;

-(NSMutableArray *) getRecentActivity{
    LocalStorageController *local = [[LocalStorageController alloc]init];
    NSMutableArray *tmp = [local getRecentActivity];
    [local release];
    return tmp;
}

第二种情况很难在没有看到更多实际代码的情况下以一般方式解决。

于 2012-02-05T19:11:27.170 回答
0

使用 serv 作为属性将解决此保留/释放问题。

在您的 .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,您将不会遇到释放对象的问题。

于 2012-02-05T20:12:46.870 回答