如果我有这样的代码如何在iPhone应用程序中可靠地释放内存?
NSString *postData = [@"foo=" stringByAppendingString:fooText.text];
...
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
...
[postData release]; //this causes crash
[request release]; //this causes crash
现在我明白了,这是expected behavior according to Apple's documents。现在,如果我删除发布代码崩溃不会发生,但我发现无论如何内存泄漏*请求。所以我重写代码
NSString *postData;
//postData = [NSString alloc]; // this line commented out since OP
postData = [@"foo=" stringByAppendingString:fooText.text];
...
NSMutableURLRequest *request;
request = [NSMutableURLRequest alloc];
request = [request initWithURL:url];
...
[postData release]; //this still crashes #
[request release]; //this works fine
我真的不明白为什么它会在#处崩溃。这里有没有推荐的最佳做法?我认为我一定会错过一些东西,因为我经常看到有一个释放('Kochan',例如Objective-C中的编程)的'速记'方法(顶部),但是苹果文档说这是错误的。
“一般的经验法则,如果你正在调用助手静态方法(如stringByAppendingString),那么你不应该释放它。”那就是我一直在寻找的东西!然而,在第一个例子中,如果仪器指示存在内存泄漏(这全部在一个简单的方法内),我将如何释放*请求。这似乎表明autorelease不适用于*请求。 – Gazzer 2010-01-05 09:08:46
在第一个示例中,您自己分配并初始化了请求,因此您应该释放它。你做什么事会导致崩溃? EXC_BAD_ACCESS?这通常意味着你已经(或者你提出了请求)已经发布了请求,但你没有意识到。 – 2010-01-05 17:28:19