首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ios alloc版本

ios alloc版本
EN

Stack Overflow用户
提问于 2012-02-06 03:04:22
回答 2查看 1.3K关注 0票数 1

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

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

通常,从这些文件调用方法的代码如下所示:

代码语言:javascript
复制
-(NSMutableArray *) getRecentActivity{
    LocalStorageController *local = [[LocalStorageController alloc]init];
    return [local getRecentActivity];
}

getRecentActivity返回一个NSMutableArray。

在这段代码中,我们可以看到我为LocalStorageController分配了内存,但我从未调用过release方法,所以我想,我调用该函数的次数越多,分配的内存就越多。

如果我在init之后调用autorelease,它会崩溃。

此外,我通常会使用另一种代码:

代码语言:javascript
复制
    ServerConnection *serv = [[ServerConnection alloc]init];
    NSMutableArray list = [serv getMyListOfContacts];

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

该如何处理这种情况呢?

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2012-02-06 03:11:27

第一种情况很简单;

代码语言:javascript
复制
-(NSMutableArray *) getRecentActivity{
    LocalStorageController *local = [[LocalStorageController alloc]init];
    NSMutableArray *tmp = [local getRecentActivity];
    [local release];
    return tmp;
}

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-06 04:12:47

使用服务器作为属性可以修复此保留/释放问题。

在您的.h中:

代码语言:javascript
复制
@property (nonatomic, retain) ServerConnection *server;

在您的.m中:

代码语言:javascript
复制
@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,就不会有对象被释放的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9152077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档