Jak*_*kub 5 iphone memory-management asihttprequest
我正在使用 ASIHTTPRequest 库,我想确定从内存管理的角度来看我是否以一种好的方式使用它。我创造:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:someUrl];
Run Code Online (Sandbox Code Playgroud)
我想根据命名约定我不必保留请求对象,对吗?但是当我查看 requestWithURL:someUrl 方法的代码时,我可以看到:
+ (id)requestWithURL:(NSURL *)newURL
{
return [[[self alloc] initWithURL:newURL] autorelease];
}
Run Code Online (Sandbox Code Playgroud)
所以返回的对象是自动释放的。我不应该在我的代码中保留它吗?
如果在方法中使用 autorelease 对象,则不应保留,因此可以:
- (void) myMethodDoRequest
{
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:someUrl];
// use request within this scope only
}
Run Code Online (Sandbox Code Playgroud)
如果你想在 ivar 中存储 autorelease 对象,你必须保留以扩展对象的生命周期,然后释放以避免泄漏:
@interface MyClass
{
ASIFormDataRequest *request;
}
Run Code Online (Sandbox Code Playgroud)
和
- (void) myMethodStoreRequest
{
[request release];
request = [[ASIFormDataRequest requestWithURL:someUrl] retain];
}
- (void) dealloc
{
[request release];
}
Run Code Online (Sandbox Code Playgroud)