ios分配释放
我的应用程序收到内存警告,因为它需要大量内存。我试图释放每一个分配。然而,有时我不知道怎么做 例如:我有两对.h和.m文件。其中一个与服务器连接,另一个与本地SQLite连接 通常,从这些文件调用方法的代码如下:ios分配释放,ios,release,alloc,Ios,Release,Alloc,我的应用程序收到内存警告,因为它需要大量内存。我试图释放每一个分配。然而,有时我不知道怎么做 例如:我有两对.h和.m文件。其中一个与服务器连接,另一个与本地SQLite连接 通常,从这些文件调用方法的代码如下: -(NSMutableArray *) getRecentActivity{ LocalStorageController *local = [[LocalStorageController alloc]init]; return [local getRecentAct
-(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];
它使用一个HttpRequest,如果我调用[serv release];第二行之后,应用程序崩溃,EXC_BAD_访问指向ASIHTTPRequest库中的一行
我们该如何处理这种情况
多谢各位 第一例容易
-(NSMutableArray *) getRecentActivity{
LocalStorageController *local = [[LocalStorageController alloc]init];
NSMutableArray *tmp = [local getRecentActivity];
[local release];
return tmp;
}
第二种情况是,如果不看到更多的实际代码,就很难用一般方法解决。使用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,就不会有发布对象的问题。我只是简单地展示了发布代码的方向,但你是对的。我更新了我的答案。谢谢你指出这一点!再次编辑它,你应该把呼叫超级dealoc放在底部。首先,谢谢你的回答。我意识到我的示例是错误的:似乎我无法发布它,因为我正在异步使用ASIHTTPRequest,所以它需要在那里等待委托。如果我这样做,它会再次崩溃。。。那么,你现在该怎么做呢?把它作为一个属性使用,但在你的-idinit函数中初始化它。我这么说了,但它会导致同样的错误。我认为,由于答案可能会在几秒钟后到达,如果我释放服务器,它将无法处理响应,因为释放是第一位的,因此ASIHTTPRequest无法调用已释放的委托。我不知道我是否解释得很好。。。但如果我这样做,它会崩溃,如果我什么也不做,它会保留在内存中,不是吗?你也会希望在tmp上保留一个,然后自动返回它。除非您这样做,否则您不能假设tmp在[local release]之后是有效的。